window.BMAP_AUTHENTIC_KEY = "0526b09fdae3df8480d2bb88fe17fbc4"; 
(function() {
	
    var aa = void 0,
    f = !0,
    k = null,
    l = !1;
    function m() {
        return function() {}
    }
    function ba(a) {
        return function(b) {
            this[a] = b
        }
    }
    function o(a) {
        return function() {
            return this[a]
        }
    }
    function ca(a) {
        return function() {
            return a
        }
    }
    var da = document,
    p = Math,
    ea = RegExp,
    t = parseInt,
    fa = parseFloat,
    u = "prototype",
    v = "appendChild",
    ga = "removeChild",
    w = "length",
    x = "extend",
    y = "width",
    A = "height",
    ia = "offsetX",
    ja = "offsetY",
    B = "addEventListener",
    ka = "parentNode",
    la = "position";
    var ma,
    C = ma = C || {
        version: "1.3.4"
    };
    C.K = "$BAIDU$";
    window[C.K] = window[C.K] || {};
    C.object = C.object || {};
    C["extend"] = C.object["extend"] = function(a, b) {
        for (var c in b) 
        	b.hasOwnProperty(c) && (a[c] = b[c]);
        return a
    };
    C.w = C.w || {};
    
    C.w.U = function(a) {
        return "string" == typeof a || a instanceof String ? da.getElementById(a) : a && a.nodeName && (1 == a.nodeType || 9 == a.nodeType) ? a: k
    };
    C.U = C.Lb = C.w.U;
    
    C.w.G = function(a) {
        a = C.w.U(a);
        a.style.display = "none";
        return a
    };
    C.G = C.w.G;
    
    C.lang = C.lang || {};
    
    C.lang.nd = function(a) {
        return "[object String]" == Object[u].toString.call(a)
    };
    
    C.nd = C.lang.nd;
    
    C.w.$e = function(a) {
        return C.lang.nd(a) ? da.getElementById(a) : a
    };
    
    C.$e = C.w.$e;
    C.w.getElementByIdAndElement=C.w.$e;
    C.getElementByIdAndElement=C.$e;
    
    //两个节点的包含关系
    C.w.contains = function(a, b) {
        var c = C.w.$e,
      	a = c(a),
        b = c(b);
        return a.contains ? a != b && a.contains(b) : !!(a.compareDocumentPosition(b) & 16)
    };
    
    C.O = C.O || {};
    //判断是否为ie楼兰器
    /msie (\d+\.\d)/i.test(navigator.userAgent) && (C.O.T = C.T = da.documentMode || +ea.$1);
    var na = {
        cellpadding: "cellPadding",
        cellspacing: "cellSpacing",
        colspan: "colSpan",
        rowspan: "rowSpan",
        valign: "vAlign",
        usemap: "useMap",
        frameborder: "frameBorder"
    };
    
    8 > C.O.T ? (na["for"] = "htmlFor", na["class"] = "className") : (na.htmlFor = "for", na.className = "class");
    
    C.w.Sp = na;
    
    C.w.lp = function(a, b, c) {
        a = C.w.U(a);
        if ("style" == b) a.style.cssText = c;
        else {
            b = C.w.Sp[b] || b;
            a.setAttribute(b, c)
        }
        return a
    };
    
    C.lp = C.w.lp;
    C.w.mp = function(a, b) {
        var a = C.w.U(a),c;
        for (c in b) 
        	C.w.lp(a, c, b[c]);
        return a
    };
    
    C.mp = C.w.mp;
    C.xf = C.xf || {}; 
    (function() {
        var a = new ea("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)", "g");
        C.xf.trim = function(b) {
            return ("" + b).replace(a, "")
        }
    })();
    
    C.trim = C.xf.trim;
    
    C.xf.jg = function(a, b) {
        var a = "" + a,
        c = Array[u].slice.call(arguments, 1),
        d = Object[u].toString;
        if (c[w]) {
            c = c[w] == 1 ? b !== k && /\[object Array\]|\[object Object\]/.test(d.call(b)) ? b: c: c;
            return a.replace(/#\{(.+?)\}/g, 
            function(a, b) {
                var i = c[b];
                "[object Function]" == d.call(i) && (i = i(b));
                return "undefined" == typeof i ? "": i
            })
        }
        return a
    };
    
    C.jg = C.xf.jg;
    
    C.w.$b = function(a, b) {
        for (var a = C.w.U(a), c = a.className.split(/\s+/), d = b.split(/\s+/), e, g = d[w], i, j = 0; j < g; ++j) {
            i = 0;
            for (e = c[w]; i < e; ++i) if (c[i] == d[j]) {
                c.splice(i, 1);
                break
            }
        }
        a.className = c.join(" ");
        return a
    };
    C.$b = C.w.$b;
    C.w.No = function(a, b, c) {
        var a = C.w.U(a),
        d;
        if (a.insertAdjacentHTML) a.insertAdjacentHTML(b, c);
        else {
            d = a.ownerDocument.createRange();
            b = b.toUpperCase();
            if (b == "AFTERBEGIN" || b == "BEFOREEND") {
                d.selectNodeContents(a);
                d.collapse(b == "AFTERBEGIN")
            } else {
                b = b == "BEFOREBEGIN";
                d[b ? "setStartBefore": "setEndAfter"](a);
                d.collapse(b)
            }
            d.insertNode(d.createContextualFragment(c))
        }
        return a
    };
    C.No = C.w.No;
    C.w.show = function(a) {
        a = C.w.U(a);
        a.style.display = "";
        return a
    };
    C.show = C.w.show;
    C.w.so = function(a) {
        a = C.w.U(a);
        return a.nodeType == 9 ? a: a.ownerDocument || a.document
    };
    C.w.Za = function(a, b) {
        for (var a = C.w.U(a), c = b.split(/\s+/), d = a.className, e = " " + d + " ", g = 0, i = c[w]; g < i; g++) e.indexOf(" " + c[g] + " ") < 0 && (d = d + (" " + c[g]));
        a.className = d;
        return a
    };
    C.Za = C.w.Za;
    C.w.nn = C.w.nn || {};
    C.w.Sf = C.w.Sf || [];
    C.w.Sf.filter = function(a, b, c) {
        for (var d = 0, e = C.w.Sf, g; g = e[d]; d++) 
        	if (g = g[c]) 
        		b = g(a, b);
        return b
    };
    C.xf.gu = function(a) {
        return a.indexOf("-") < 0 && a.indexOf("_") < 0 ? a: a.replace(/[-_][^-_]/g, 
        function(a) {
            return a.charAt(1).toUpperCase()
        })
    };
    C.w.Oe = function(a, b) {
        var c = C.w,
        a = c.U(a),
        b = C.xf.gu(b),
        d = a.style[b];
        if (!d) 
        	var e = c.nn[b],
        d = a.currentStyle || (C.O.T ? a.style: getComputedStyle(a, k)),
        d = e && e.get ? e.get(a, d) : d[e || b];
        if (e = c.Sf) 
        	d = e.filter(b, d, "get");
        return d
    };
    C.Oe = C.w.Oe;
    /opera\/(\d+\.\d)/i.test(navigator.userAgent) && (C.O.opera = +ea.$1);
    C.O.Ss = /webkit/i.test(navigator.userAgent);
    C.O.Jz = /gecko/i.test(navigator.userAgent) && !/like gecko/i.test(navigator.userAgent);
    C.O.Ro = "CSS1Compat" == da.compatMode;
    C.w.V = function(a) {
        var a = C.w.U(a),
        b = C.w.so(a),
        c = C.O,
        d = C.w.Oe;
        c.Jz > 0 && b.getBoxObjectFor && d(a, "position");
        var e = {
            left: 0,
            top: 0
        },
        g;
        if (a == (c.T && !c.Ro ? b.body: b.documentElement)) return e;
        if (a.getBoundingClientRect) {
            a = a.getBoundingClientRect();
            e.left = p.floor(a.left) + p.max(b.documentElement.scrollLeft, b.body.scrollLeft);
            e.top = p.floor(a.top) + p.max(b.documentElement.scrollTop, b.body.scrollTop);
            e.left = e.left - b.documentElement.clientLeft;
            e.top = e.top - b.documentElement.clientTop;
            a = b.body;
            b = t(d(a, "borderLeftWidth"));
            d = t(d(a, "borderTopWidth"));
            if (c.T && !c.Ro) {
                e.left = e.left - (isNaN(b) ? 2: b);
                e.top = e.top - (isNaN(d) ? 2: d)
            }
        } else {
            g = a;
            do {
                e.left = e.left + g.offsetLeft;
                e.top = e.top + g.offsetTop;
                if (c.Ss > 0 && d(g, "position") == "fixed") {
                    e.left = e.left + b.body.scrollLeft;
                    e.top = e.top + b.body.scrollTop;
                    break
                }
                g = g.offsetParent
            }
            while (g && g != a);
            if (c.opera > 0 || c.Ss > 0 && d(a, "position") == "absolute") e.top = e.top - b.body.offsetTop;
            for (g = a.offsetParent; g && g != b.body;) {
                e.left = e.left - g.scrollLeft;
                if (!c.opera || g.tagName != "TR") e.top = e.top - g.scrollTop;
                g = g.offsetParent
            }
        }
        return e
    };
    /firefox\/(\d+\.\d)/i.test(navigator.userAgent) && (C.O.Ke = +ea.$1);
    var oa = navigator.userAgent;
    /(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(oa) && !/chrome/i.test(oa) && (C.O.rA = +(ea.$1 || ea.$2));
    /chrome\/(\d+\.\d)/i.test(navigator.userAgent) && (C.O.Rx = +ea.$1);
    C.Qb = C.Qb || {};
    C.Qb.Dd = function(a, b) {
        var c,
        d,
        e = a[w];
        if ("function" == typeof b) 
        	for (d = 0; d < e; d++) {
	            c = a[d];
	            c = b.call(a, c, d);
            	if (c === l) 
            		break
        	}
        return a
    };
    C.Dd = C.Qb.Dd;
    
    
    C.lang.K = function() {
        return "TANGRAM__" + (window[C.K]._counter++).toString(36)
    };
    
    
    window[C.K]._counter = window[C.K]._counter || 1;
    
    window[C.K]._instances = window[C.K]._instances || {};
    
    C.lang.Zi = function(a) {
        return "[object Function]" == Object[u].toString.call(a)
    };
    //
    C.lang.oa = function(a) {
        this.K = a || C.lang.K();
        window[C.K]._instances[this.K] = this
    };
    
    
    
    window[C.K]._instances = window[C.K]._instances || {};
    
    
    C.lang.oa[u].He = function() {
        delete window[C.K]._instances[this.K];
        for (var a in this) 
        	C.lang.Zi(this[a]) || delete this[a]
    };
    
    C.lang.oa[u].toString = function() {
        return "[object " + (this.Xu || "Object") + "]"
    };
    
    //事件传递对象，应用于事件分发的机制
    C.lang.Ej = function(a, b) {
        this.type = a;
        this.returnValue = f;
        this.target = b || k;
        this.currentTarget = k
    };
    
    C.lang.oa.prototype.addEventListener = function(a, b, c) {
    	//C.lang.Zi判断b是否为函数
        if (C.lang.Zi(b)) { 
        	! this.xe && (this.xe = {});
            var d = this.xe,e;
            //主动生成回调函数的唯一标示
            if (typeof c == "string" && c) {
                if (/[^\w\-]/.test(c)) 
                	throw "nonstandard key:" + c;
                e = b.Gs = c
            }
            a.indexOf("on") != 0 && (a = "on" + a);
            typeof d[a] != "object" && (d[a] = {});
            e = e || C.lang.K();
            b.Gs = e;
            d[a][e] = b
        }
    };
    C.lang.oa[u].removeEventListener = function(a, b) {
        if (C.lang.Zi(b)) 
        	b = b.Gs;
        else if (!C.lang.nd(b)) 
        	return; 
        ! this.xe && (this.xe = {});
        a.indexOf("on") != 0 && (a = "on" + a);
        var c = this.xe;
        c[a] && c[a][b] && delete c[a][b]
    };
    //触发事件,应该是百度地图的事件触发机制
    C.lang.oa[u].dispatchEvent = function(a, b) {
    	//c.lang.nd判断是否为String类型
        C.lang.nd(a) && (a = new C.lang.Ej(a)); 
        ! this.xe && (this.xe = {});
        var b = b || {},c;
        for (c in b) 
        	a[c] = b[c];
        var d = this.xe,
        //为event对象修改某些值。
        e = a.type;
        a.target = a.target || this;
        a.currentTarget = this;
        e.indexOf("on") != 0 && (e = "on" + e);
        C.lang.Zi(this[e]) && this[e].apply(this, arguments);
        if (typeof d[e] == "object") 
        	for (c in d[e]) 
        		d[e][c].apply(this, arguments);
        return a.returnValue
    };
    
    //继承方法
    C.lang.fa = function(a, b, c) {
        var d,e,g = a[u];
        //***靠，在深度继承呢，
        e = new Function;
        
        e[u] = b[u];
        
        e = a[u] = new e;
        
        for (d in g) 
        	e[d] = g[d];
        
        a[u].constructor = a;
        //***
        a.XA = b[u];
        
        if ("string" == typeof c) 
        	e.Xu = c
    };
    
    C.fa = C.lang.fa;
    
    //取得地图所有生成的对象
    C.lang.Kd = function(a) {
        return window[C.K]._instances[a] || null
    };
    
    //验证平台的版本
    C.platform = C.platform || {};
    C.platform.Mz = /macintosh/i.test(navigator.userAgent);
    C.platform.Ts = /windows/i.test(navigator.userAgent);
    C.platform.Rz = /x11/i.test(navigator.userAgent);
    C.platform.Ms = /android/i.test(navigator.userAgent);
    /android (\d+\.\d)/i.test(navigator.userAgent) && (C.platform.Dr = C.Dr = ea.$1);
    C.platform.Kz = /ipad/i.test(navigator.userAgent);
    C.platform.Lz = /iphone/i.test(navigator.userAgent);
    C.lang.Ej[u].la = function(a) {
        a = window.event || a;
        this.clientX = a.clientX || a.pageX;
        this.clientY = a.clientY || a.pageY;
        this[ia] = a[ia] || a.layerX;
        this[ja] = a[ja] || a.layerY;
        this.screenX = a.screenX;
        this.screenY = a.screenY;
        this.ctrlKey = a.ctrlKey || a.metaKey;
        this.shiftKey = a.shiftKey;
        this.altKey = a.altKey;
        if (a.touches) {
            this.touches = [];
            for (var b = 0; b < a.touches[w]; b++) this.touches.push({
                clientX: a.touches[b].clientX,
                clientY: a.touches[b].clientY,
                screenX: a.touches[b].screenX,
                screenY: a.touches[b].screenY,
                pageX: a.touches[b].pageX,
                pageY: a.touches[b].pageY,
                target: a.touches[b].target,
                identifier: a.touches[b].identifier
            })
        }
        if (a.changedTouches) {
            this.changedTouches = [];
            for (b = 0; b < a.changedTouches[w]; b++) this.changedTouches.push({
                clientX: a.changedTouches[b].clientX,
                clientY: a.changedTouches[b].clientY,
                screenX: a.changedTouches[b].screenX,
                screenY: a.changedTouches[b].screenY,
                pageX: a.changedTouches[b].pageX,
                pageY: a.changedTouches[b].pageY,
                target: a.changedTouches[b].target,
                identifier: a.changedTouches[b].identifier
            })
        }
        if (a.targetTouches) {
            this.targetTouches = [];
            for (b = 0; b < a.targetTouches[w]; b++) this.targetTouches.push({
                clientX: a.targetTouches[b].clientX,
                clientY: a.targetTouches[b].clientY,
                screenX: a.targetTouches[b].screenX,
                screenY: a.targetTouches[b].screenY,
                pageX: a.targetTouches[b].pageX,
                pageY: a.targetTouches[b].pageY,
                target: a.targetTouches[b].target,
                identifier: a.targetTouches[b].identifier
            })
        }
        this.rotation = a.rotation;
        this.scale = a.scale;
        return this
    };
    C.lang.Ok = function(a) {
        var b = window[C.K];
        b.ew && delete b.ew[a]
    };
    C.event = {};
    C.C = C.event.C = function(a, b, c) {
        if (! (a = C.U(a))) 
        	return a;
        b = b.replace(/^on/, "");
        if (a[B]) 
        	a[B](b, c, l);
        else 
        	a.attachEvent && a.attachEvent("on" + b, c);
        return a
    };
    C.qc = C.event.qc = function(a, b, c) {
        if (! (a = C.U(a))) 
        	return a;
        b = b.replace(/^on/, "");
        a.removeEventListener ? a.removeEventListener(b, c, l) : a.detachEvent && a.detachEvent("on" + b, c);
        return a
    };
    C.w.vz = function(a) {
        if (!a || !a.className || typeof a.className != "string") 
        	return l;
        var b = -1;
        try {
            b = a.className == "BMap_Marker" || a.className.search(new ea("(\\s|^)BMap_Marker(\\s|$)"))
        } catch(c) {
            return l
        }
        return b > -1
    };
    C.fo = function() {
        function a(a) {
            da[B] && (this.element = a, this.is = this.ug ? "touchstart": "mousedown", this.jo = this.ug ? "touchmove": "mousemove", this.io = this.ug ? "touchend": "mouseup", this.Yo = l, this.Wt = this.Vt = 0, this.element[B](this.is, this, l), ma.C(this.element, "mousedown", m()), this.handleEvent(k))
        }
        a[u] = {
            ug: "ontouchstart" in window || "createTouch" in document,
            start: function(a) {
                pa(a);
                this.Yo = l;
                this.Vt = this.ug ? a.touches[0].clientX: a.clientX;
                this.Wt = this.ug ? a.touches[0].clientY: a.clientY;
                this.element[B](this.jo, this, l);
                this.element[B](this.io, this, l)
            },
            move: function(a) {
                qa(a);
                var c = this.ug ? a.touches[0].clientY: a.clientY;
                if (10 < p.abs((this.ug ? a.touches[0].clientX: a.clientX) - this.Vt) || 10 < p.abs(c - this.Wt)) this.Yo = f
            },
            end: function(a) {
                qa(a);
                this.Yo || (a = da.createEvent("Event"), a.initEvent("tap", l, f), this.element.dispatchEvent(a));
                this.element.removeEventListener(this.jo, this, l);
                this.element.removeEventListener(this.io, this, l)
            },
            handleEvent: function(a) {
                if (a) switch (a.type) {
                case this.is:
                    this.start(a);
                    break;
                case this.jo:
                    this.move(a);
                    break;
                case this.io:
                    this.end(a)
                }
            }
        };
        return function(b) {
            return new a(b)
        }
    } ();
    
    var H = window.BMap || {};
    
    H.version = "1.5";
    
    H.ri = [];
    
    H.Ec = function(a) {
        this.ri.push(a)
    };
    
    H.Ex = H.apiLoad || m();
    
    var ra = window.BMAP_AUTHENTIC_KEY;
    
    window.BMAP_AUTHENTIC_KEY = k;
    
    var sa = window.BMap_loadScriptTime,
    
    ta = (new Date).getTime(),
    
    ua = k,
    
    va = f;
    
    
    //地图的构造函数，基类，用于初始化地图也就是new Bmap.map();
    function wa(a, b) {
        if (a = C.U(a)) {
        	
            var c = this;
            
            C.lang.oa.call(c);
            
            b = b || {};
            //主要用于控制，地图的基本控制参数，相当于内置了一个
            c.J = {
                Jn: 200,
                //控制是否可以拖拽
                nb: f,
                //是否启用键盘控制地图
                Tk: l,
                //双击放大缩小
                $n: f,
                //连续放大缩小动画效果
                Ji: l,
                //鼠标滚轮放大缩小
                Ki: l,
                
                co: f,
                //启用双指操作缩放
                Uk: f,
                //启用自适应容器大小
                Rk: f,
                Nc: 25,
                uB: 240,
                tx: 450,
                //地图鼠标样式，符合css标准
                rb: J.rb,
                //设置地图拖拽时的鼠标样式
                Bc: J.Bc,
                hl: !!b.hl,
                //最小级别
                Hb: b.minZoom || 1,
                //最大级别
                hc: b.maxZoom || 18,
                //地图mapType值
                eb: b.mapType || xa,
                MC: l,
                //控制地图惯性拖拽。
                Sk: l,
                Xn: 500,
                yy: b.enableHighResolution !== l,
                zy: b.enableMapClick !== l
            };
            
            b.enableAutoResize && (c.J.Rk = b.enableAutoResize);
            //ja存储用户输入的div元素
            c.ja = a;
            c.hn(a);
            a.unselectable = "on";
            a.innerHTML = "";
            a["appendChild"](c.Sa());
            b.size && this.sd(b.size);
            //对中心点经纬进行运算，
            var d = c.Sb();
            c["width"] = d["width"];
            c["height"] = d["height"];
            c["offsetX"] = 0;
            c["offsetY"] = 0;
            //platform存储的就是输入div的子元素
            c.platform = a.firstChild;
            //c.Sc存储的platform子节点
            c.Sc = c.platform.firstChild;
            c.Sc.style[y] = c[y] + "px";
            c.Sc.style[A] = c[A] + "px";
            c.cc = {};
            
            c.Cd = new K(0, 0);
            c.Gb = new K(0, 0);
            //地图当前级别va，设置地方在zoomAndCenter里.
            c.va = 1;
         	//Wb记录上次zoom级别   
            c.Wb = 0;
            c.Qn = null;
            c.Pn = null;
            c.ib = "";
            c.Dn = "";
            c.Zd = {};
            c.Zd.custom = {};
            c.na = 0;
            b = b || {};
            //地图mapType，
            d = c.eb = c.J.eb;
            
            c.lc = d.qg();
            d === ya && za(5002); (d === Aa || d === Ba) && za(5003);
            d = c.J;
            //重新命名了..
            //设置J中的ou为最小级别
            d.ou = b.minZoom;
            //设置J中的nu为最大级别
            d.nu = b.maxZoom;
            
            c.gm();
            
            c.B = {
                jb: l,
                Qa: 0,
                cj: 0,
                Ys: 0,
                uC: 0,
                Bn: l,
                fp: -1,
                cd: []
            };
            
            c.platform.style.cursor = c.J.rb;
            
            for (d = 0; d < H.ri[w]; d++) 
            	H.ri[d](c);
            
            c.B.fp = d;
            c.L();
            L.load("map", 
            function() {
                c.Ob()
            });
            c.J.zy && L.load("mapclick", 
            function() {
                window.MPC_Mgr = new Ca(c)
            }); 
            (C.platform.Ts || C.platform.Mz || C.platform.Rz) && L.load("oppc", 
	            function() {
	                c.bm()
	            });
            Da() && L.load("opmb", 
            function() {
                c.bm()
            });
            a = null;
            c.tn = []
        }
    }
    //继承C.lang.oa也就是让map对象继承事件触发对象，但是继承的内容是在wa的prototype的__proto__里的，也就是
    //放在了爷爷辈分里
    //
    C.lang.fa(wa, C.lang.oa, "Map");
    
    C.extend(wa[u], {
    	
        Sa: function() {
            var a = M("div"),
            b = a.style;
            b.overflow = "visible";
            b.position = "absolute";
            b.zIndex = "0";
            b.top = b.left = "0px";
            var b = M("div", {
                "class": "BMap_mask"
            }),
            c = b.style;
            c[la] = "absolute";
            c.top = c.left = "0px";
            c.zIndex = "9";
            c.overflow = "hidden";
            c.WebkitUserSelect = "none";
            a[v](b);
            return a
        },
        
        hn: function(a) {
            var b = a.style;
            b.overflow = "hidden";
            "absolute" != Ea(a)[la] && (b[la] = "relative", b.zIndex = 0);
            b.backgroundColor = "#F3F1EC";
            b.color = "#000";
            b.textAlign = "left"
        },
        
        L: function() {
            var a = this;
            a.xi = function() {
                var b = a.Sb();
                if (a[y] != b[y] || a[A] != b[A]) {
                    var c = new P(a[y], a[A]),
                    d = new Q("onbeforeresize");
                    d.size = c;
                    a.dispatchEvent(d);
                    a.Uf((b[y] - a[y]) / 2, (b[A] - a[A]) / 2);
                    a.Sc.style[y] = (a[y] = b[y]) + "px";
                    a.Sc.style[A] = (a[A] = b[A]) + "px";
                    c = new Q("onresize");
                    c.size = b;
                    a.dispatchEvent(c)
                }
            };
            a.J.Rk && (a.B.Ai = setInterval(a.xi, 80))
        },
        Uf: function(a, b, c, d) {
            var e = this.ba().ob(this.ha()),
            g = this.lc,
            i = f;
            c && K.Ns(c) && (this.Cd = new K(c.lng, c.lat), i = l);
            if (c = c && d ? g.yg(c, this.ib) : this.Gb) if (this.Gb = new K(c.lng + a * e, c.lat - b * e), (a = g.pf(this.Gb, this.ib)) && i) this.Cd = a
        },
        Sd: function(a, b) {
        	//Fa判断是否为数字
            if (Fa(a) && (a = this.Wg(a).zoom, a != this.va)) {
                this.Wb = this.va;
                this.va = a;
                var c;
                //下面两行代码作用不明！！！！！！！
                b ? c = b: this.Le() && (c = this.Le().V());
                c && (c = this.$a(c, this.Wb), this.Uf(this[y] / 2 - c.x, this[A] / 2 - c.y, this.Ma(c, this.Wb), f));
                this.dispatchEvent(new Q("onzoomstart"));
                this.dispatchEvent(new Q("onzoomstartcode"))
            }
        },
        /*
         * function setZoom方法 调用Sd方法
         * @param {Object} a 级别
         * @memberOf {TypeName} 
         */
        Jl: function(a) {
            this.Sd(a)
        },
        /*
         * function zoomIn方法，缩小地图级别
         * @param {Object} a  参数a作用不明
         * @memberOf {TypeName} 
         */
        Dp: function(a) {
            this.Sd(this.va + 1, a)
        },
        /*
         * function zoomOut方法，放大地图级别
         * 
         * @param {Object} a 参数a作用不明
         * @memberOf {TypeName} 
         */
        Ep: function(a) {
            this.Sd(this.va - 1, a)
        },
        qd: function(a) {
            a instanceof K && (this.Gb = this.lc.yg(a, this.ib), this.Cd = K.Ns(a) ? new K(a.lng, a.lat) : this.lc.pf(this.Gb, this.ib))
        },
        Od: function(a, b) {
            a = p.round(a) || 0;
            b = p.round(b) || 0;
            this.Uf( - a, -b)
        },
        vn: function(a) {
            a && Ga(a.kd) && (a.kd(this), this.dispatchEvent(new Q("onaddcontrol", a)))
        },
        nA: function(a) {
            a && Ga(a.remove) && (a.remove(), this.dispatchEvent(new Q("onremovecontrol", a)))
        },
        hh: function(a) {
            a && Ga(a.ta) && (a.ta(this), this.dispatchEvent(new Q("onaddcontextmenu", a)))
        },
        Dh: function(a) {
            a && Ga(a.remove) && (this.dispatchEvent(new Q("onremovecontextmenu", a)), a.remove())
        },
        Ha: function(a) {
            a && Ga(a.kd) && (a.kd(this), this.dispatchEvent(new Q("onaddoverlay", a)))
        },
        mc: function(a) {
            a && Ga(a.remove) && (a.remove(), this.dispatchEvent(new Q("onremoveoverlay", a)))
        },
        Qr: function() {
            this.dispatchEvent(new Q("onclearoverlays"))
        },
        zi: function(a) {
            a && this.dispatchEvent(new Q("onaddtilelayer", a))
        },
        gj: function(a) {
            a && this.dispatchEvent(new Q("onremovetilelayer", a))
        },
        
        /*
         * function setMaptype 
         * @param {Object} a MapType对象，代表地图类型,三维图，栅格图等这些结构
         * @memberOf {TypeName} 
         */
        Te: function(a) {
            if (this.eb !== a) {
                var b = new Q("onsetmaptype");
                b.KC = this.eb;
                this.eb = this.J.eb = a;
                this.lc = this.eb.qg();
                this.Uf(0, 0, this.Ia(), f);
                this.gm();
                var c = this.Wg(this.ha()).zoom;
                this.Sd(c);
                this.dispatchEvent(b);
                b = new Q("onmaptypechange");
                b.va = c;
                b.eb = a;
                this.dispatchEvent(b); (a === Aa || a === Ba) && za(5003)
            }
        },
        /*
         * setCenter 设置地图中心点
         * @param {Object} a  经纬度对象或者String 城市
         * @memberOf {TypeName} 
         */
        rd: function(a) {
            var b = this;
            if (a instanceof K) 
            	b.qd(a, {
                noAnimation: true
            });
            //Ha验证是否为String
            else if (Ha(a)) 
            	if (b.eb == ya) {
                var c = J.Gn[a];
                c && (pt = c.k, b.rd(pt))
            	} else {
	                var d = this.Cq();
	                d.qp(function(c) {
	                    0 == d.rg() && 2 == d.da.result.type && (b.rd(c.nf(0).point), ya.mh(a) && b.op(a))
	                });
	                d.search(a, {
	                    log: "center"
	                })
            }
        },
        //zoom and center
        Ic: function(a, b) {
            var c = this;
            //判断经纬度是否为字符串，如果是执行下面的方法，如果不是执行else
            
            if (Ha(a)) 
            	if (c.eb == ya) {
	                var d = J.Gn[a];
	                d && (pt = d.k, c.Ic(pt, b))
            	} else {
	                var e = c.Cq();
	                e.qp(function(d) {
	                    if (0 == e.rg() && 2 == e.da.result.type) {
	                        var d = d.nf(0).point,
	                        g = b || R.oo(e.da.content.level, c);
	                        c.Ic(d, g);
	                        ya.mh(a) && c.op(a)
                    }
                });
                e.search(a, {
                    log: "center"
                })
            } else if (a instanceof K && b) {
            	//获得正确的zoom，如果b正确，则zoom仍然是b
                b = c.Wg(b).zoom;
                //这是干嘛呢？？
                c.Wb = c.va || b;
                //为va设置当前地图级别，
                c.va = b;
                //Cd为当前中心点经纬度
                c.Cd = new K(a.lng, a.lat);
                //Gb似乎是将经纬度转化为zoom级别的像素点
                c.Gb = c.lc.yg(c.Cd, c.ib);
                //为Qn赋值为zoom级别
                c.Qn = c.Qn || c.va;
                //Pn为中心点经纬度
                c.Pn = c.Pn || c.Cd;
                var d = new Q("onload"),
                g = new Q("onloadcode");
                //d.pint为中心点经纬度
                d.point = new K(a.lng, a.lat);
                //d.pixel为
                d.pixel = c.$a(c.Cd, c.va);
                d.zoom = b;
                c.loaded || (c.loaded = true, c.dispatchEvent(d), ua || (ua = Ia()));
                c.dispatchEvent(g);
                c.dispatchEvent(new Q("onmoveend"));
                c.Wb != c.va && c.dispatchEvent(new Q("onzoomend"))
            }
        },
        Cq: function() {
            this.B.bt || (this.B.bt = new Ja(1));
            return this.B.bt
        },
        //将地图恢复到地图初始化时的状态。this.Pn为中心点经纬度，Qn为其zoom级别
        reset: function() {
            this.Ic(this.Pn, this.Qn, f)
        },
        enableDragging: function() {
            this.J.nb = f
        },
        disableDragging: function() {
            this.J.nb = l
        },
        enableInertialDragging: function() {
            this.J.Sk = f
        },
        disableInertialDragging: function() {
            this.J.Sk = l
        },
        enableScrollWheelZoom: function() {
            this.J.Ki = f
        },
        disableScrollWheelZoom: function() {
            this.J.Ki = l
        },
        enableContinuousZoom: function() {
            this.J.Ji = f
        },
        disableContinuousZoom: function() {
            this.J.Ji = l
        },
        enableDoubleClickZoom: function() {
            this.J.$n = f
        },
        disableDoubleClickZoom: function() {
            this.J.$n = l
        },
        enableKeyboard: function() {
            this.J.Tk = f
        },
        disableKeyboard: function() {
            this.J.Tk = l
        },
        enablePinchToZoom: function() {
            this.J.Uk = f
        },
        disablePinchToZoom: function() {
            this.J.Uk = l
        },
        //启用自适应容器大小
        enableAutoResize: function() {
            this.J.Rk = f;
            this.xi();
            //自适应窗口的setInterval
            this.B.Ai || (this.B.Ai = setInterval(this.xi, 80))
        },
        disableAutoResize: function() {
            this.J.Rk = l;
            this.B.Ai && (clearInterval(this.B.Ai), this.B.Ai = k)
        },
        //getSize方法，取得地图
        Sb: function() {
            return this.Fi && this.Fi instanceof P ? new P(this.Fi[y], this.Fi[A]) : new P(this.ja.clientWidth, this.ja.clientHeight)
        },
        sd: function(a) {
            a && a instanceof P ? (this.Fi = a, this.ja.style[y] = a[y] + "px", this.ja.style[A] = a[A] + "px") : this.Fi = k
        },
        //getCenter方法取得地图中心点，中心点在zoomAndCenter里设置
        Ia: o("Cd"),
        //获得地图中心点
        ha: o("va"),
        Qx: function() {
            this.xi()
        },
        //判断zoom级别的正确性
        Wg: function(zoom) {
        	//J.Hb为zoom的最小界别，hc为zoom的最大界别
            var min = this.J.Hb,
            max = this.J.hc,
            d = false;
            zoom < min && (d = true, zoom = min);
            zoom > max && (d = true, zoom = max);
            return {
                zoom: zoom,
                ko: d
            }
        },
        Fd: o("ja"),
        
        //point为经纬度点，zoom为级别，Gb为经纬度与级别产生的一个像素点，ib是个''
        $a: function(point, zoom) {
        	//取得当前地图级别
            zoom = zoom || this.ha();
            //this.lc就是T的工具函数
            return this.lc.$a(point, zoom, this.Gb, this.Sb(), this.ib)
        },
        Ma: function(a, b) {
            b = b || this.ha();
            return this.lc.Ma(a, b, this.Gb, this.Sb(), this.ib)
        },
        Pd: function(a, b) {
            if (a) {
                var c = this.$a(new K(a.lng, a.lat), b);
                c.x -= this[ia];
                c.y -= this[ja];
                return c
            }
        },
        Ct: function(a, b) {
            if (a) {
                var c = new S(a.x, a.y);
                c.x += this[ia];
                c.y += this[ja];
                return this.Ma(c, b)
            }
        },
        pointToPixelFor3D: function(a, b) {
            var c = map.ib;
            this.eb == ya && c && Ka.Vr(a, this, b)
        },
        GC: function(a, b) {
            var c = map.ib;
            this.eb == ya && c && Ka.Ur(a, this, b)
        },
        HC: function(a, b) {
            var c = this,
            d = map.ib;
            c.eb == ya && d && Ka.Vr(a, c, 
            function(a) {
                a.x -= c[ia];
                a.y -= c[ja];
                b && b(a)
            })
        },
        FC: function(a, b) {
            var c = map.ib;
            this.eb == ya && c && (a.x += this[ia], a.y += this[ja], Ka.Ur(a, this, b))
        },
        //getBounds, 返回bound对象，返回地图可视区域，以地理坐标表示
        lf: function(a) {
        	//判断地图是否已加载
            if (!this.Po()) 
            	return new La;
            //该参数在api上没有标明
            var b = a || {};
            a = b.margins || [0, 0, 0, 0];
            var c = b.zoom || null;
            b = this.Ma({
                x: a[3],
                y: this["height"] - a[2]
            },
            c);
            a = this.Ma({
                x: this["width"] - a[1],
                y: a[0]
            },
            c);
            return new La(b, a)
        },
        //判断地图是否已加载,
        Po: function() {
            return !! this.loaded
        },
        Bv: function(a, b) {
            for (var c = this.ba(), d = b.margins || [10, 10, 10, 10], e = b.zoomFactor || 0, g = d[1] + d[3], d = d[0] + d[2], i = c.ph(), j = c = c.og(); j >= i; j--) {
                var n = this.ba().ob(j);
                if (a.Ap().lng / n < this[y] - g && a.Ap().lat / n < this[A] - d) break
            }
            j += e;
            j < i && (j = i);
            j > c && (j = c);
            return j
        },
        //getViewPort,返回viewPort对象，也就是object类型
        el: function(a, b) {
            var c = {
                center: this.Ia(),
                zoom: this.ha()
            };
            if (!a || !a instanceof La && 0 == a[w] || a instanceof La && a.Qe()) 
            	return c;
            var d = [];
            a instanceof La ? (d.push(a.Hd()), d.push(a.Id())) : d = a.slice(0);
            for (var b = b || {},e = [], g = 0, i = d[w]; g < i; g++) 
            	e.push(this.lc.yg(d[g], this.ib));
            d = new La;
            for (g = e[w] - 1; 0 <= g; g--) 
            	d[x](e[g]);
            if (d.Qe()) 
            	return c;
            c = d.Ia();
            e = this.Bv(d, b);
            b.margins && (d = b.margins, g = (d[1] - d[3]) / 2, d = (d[0] - d[2]) / 2, i = this.ba().ob(e), b.offset && (g = b.offset[y], d = b.offset[A]), c.lng += i * g, c.lat += i * d);
            c = this.lc.pf(c, this.ib);
            return {
                center: c,
                zoom: e
            }
        },
        /*
         * function setViewPort 函数
         * @param {Object} a  array[Point] | viewPort对象
         * @param {Object} b  ViewportOptions  
         * @memberOf {TypeName} 
         */
        Ih: function(a, b) {
            var c;
            //this.el方法，返回ViewPort对象,也就是说先通过array数组和viewporttions返回viewPort对象
            c = a && a.center ? a: this.el(a, b);
            var b = b || {},
            d = b.delay || 200;
            if (c.zoom == this.va && b.enableAnimation != l) {
                var obj = this;
                setTimeout(function() {
                	//qd也就是panTo方法
                    obj.qd(c.center, {
                        duration: 210
                    })
                },
                d)
            } else 
            	this.Ic(c.center, c.zoom)
        },
        ge: o("cc"),
        Le: function() {
            return this.B.za && this.B.za.qa() ? this.B.za: k
        },
        getDistance: function(a, b) {
            if (a && b) {
                var c = 0;
                return c = T.ro(a, b)
            }
        },
        Xy: function() {
            var a = [],
            b = this.X,
            c = this.rc;
            if (b) for (var d in b) b[d] instanceof Ma && a.push(b[d]);
            if (c) {
                d = 0;
                for (b = c[w]; d < b; d++) a.push(c[d])
            }
            return a
        },
        ba: o("eb"),
        bm: function() {
            for (var a = this.B.fp; a < H.ri[w]; a++) H.ri[a](this);
            this.B.fp = a
        },
        op: function(a) {
            this.ib = ya.mh(a);
            this.Dn = ya.Ly(this.ib);
            this.eb == ya && this.lc instanceof Na && (this.lc.Ln = this.ib)
        },
        //设置默认鼠标样式，
        setDefaultCursor: function(a) {
            this.J.rb = a;
            this.platform && (this.platform.style.cursor = this.J.rb)
        },
        getDefaultCursor: function() {
            return this.J.rb
        },
        setDraggingCursor: function(a) {
            this.J.Bc = a
        },
        getDraggingCursor: function() {
            return this.J.Bc
        },
        ie: function() {
            return this.J.yy && 1 < window.devicePixelRatio
        },
        wn: function(a, b) {
            b ? this.Zd[b] || (this.Zd[b] = {}) : b = "custom";
            a.tag = b;
            a instanceof Oa && (this.Zd[b][a.K] = a, a.ta(this));
            var c = this;
            L.load("hotspot", 
            function() {
                c.bm()
            })
        },
        oA: function(a, b) {
            b || (b = "custom");
            this.Zd[b][a.K] && delete this.Zd[b][a.K]
        },
        Fk: function(a) {
            a || (a = "custom");
            this.Zd[a] = {}
        },
        gm: function() {
            var a = this.ie() ? this.eb.u.yz: this.eb.ph(),
            b = this.ie() ? this.eb.u.xz: this.eb.og(),
            c = this.J;
            c.Hb = c.ou || a;
            c.hc = c.nu || b;
            c.Hb < a && (c.Hb = a);
            c.hc > b && (c.hc = b)
        },
        //设置
        setMinZoom: function(a) {
        	//设置最小级别(如果最小级别大于J.hc,则将最小级别就是原有的最大级别吧.??)
            a > this.J.hc && (a = this.J.hc);
            //设置最小级别设置,J中仍然保存着原始的记录，也就是J.Hb
            this.J.ou = a;
            this.pr()
        },
        setMaxZoom: function(a) {
        	//设置最大级别，如果最大级别大于J.Hb最小级别，则a就是最小级别
            a < this.J.Hb && (a = this.J.Hb);
            //设置最大级别，此时，J中仍然保存着原始的记录也就是J.hc
            this.J.nu = a;
            this.pr()
        },
        pr: function() {
            this.gm();
            var a = this.J;
            this.va < a.Hb ? this.Jl(a.Hb) : this.va > a.hc && this.Jl(a.hc);
            var b = new Q("onzoomspanchange");
            b.Hb = a.Hb;
            b.hc = a.hc;
            this.dispatchEvent(b)
        },
        nC: o("tn"),
        getKey: function() {
            return ra
        }
    });
    
    /**--------------------------------**/
    function za(a, b) {
        if (a) {
            var b = b || {},
            c = "",
            d;
            for (d in b) c = c + "&" + d + "=" + encodeURIComponent(b[d]);
            var e = function(a) {
                a && (Pa = f, setTimeout(function() {
                    Qa.src = J.Z + "blank.gif?" + a.src
                },
                50))
            },
            g = function() {
                var a = Ra.shift();
                a && e(a)
            };
            d = (1E8 * p.random()).toFixed(0);
            Pa ? Ra.push({
                src: "product=jsapi&v=" + H.version + "&t=" + d + "&code=" + a + c
            }) : e({
                src: "product=jsapi&v=" + H.version + "&t=" + d + "&code=" + a + c
            });
            Sa || (C.C(Qa, "load", 
            function() {
                Pa = l;
                g()
            }), C.C(Qa, "error", 
            function() {
                Pa = l;
                g()
            }), Sa = f)
        }
    }
    var Pa,Sa,Ra = [],Qa = new Image;
    za(5E3);
    
    
    //**------------**/
    function Ta(a) {
        var b = {
            duration: 1E3,
            Nc: 30,
            gf: 0,
            ud: Ua.$s,
            $o: m()
        };
        this.fd = [];
        if (a) 
        	for (var c in a) 
        		b[c] = a[c];
        this.u = b;
        if (Fa(b.gf)) {
            var d = this;
            setTimeout(function() {
                d.start()
            },
            b.gf)
        } else b.gf != Ta.Og && this.start()
    }
    
    Ta.Og = "INFINITE";
    
    Ta[u].start = function() {
        this.Jj = Ia();
        this.rm = this.Jj + this.u.duration;
        this.Mm()
    };
    Ta[u].add = function(a) {
        this.fd.push(a)
    };
    Ta[u].Mm = function() {
        var a = this,
        b = Ia();
        b >= a.rm ? (Ga(a.u.Sa) && a.u.Sa(a.u.ud(1)), Ga(a.u.finish) && a.u.finish(), 0 < a.fd[w] && (b = a.fd[0], b.fd = [].concat(a.fd.slice(1)), b.start())) : (a.Dl = a.u.ud((b - a.Jj) / a.u.duration), Ga(a.u.Sa) && a.u.Sa(a.Dl), a.xp || (a.vi = setTimeout(function() {
            a.Mm()
        },
        1E3 / a.u.Nc)))
    };
    Ta[u].stop = function(a) {
        this.xp = f;
        for (var b = 0; b < this.fd[w]; b++) 
        	this.fd[b].stop(),
        this.fd[b] = k;
        this.fd[w] = 0;
        this.vi && (clearTimeout(this.vi), this.vi = k);
        this.u.$o(this.Dl);
        a && (this.rm = this.Jj, this.Mm())
    };
    Ta[u].cancel = function() {
        this.vi && clearTimeout(this.vi);
        this.rm = this.Jj;
        this.Dl = 0
    };
    Ta[u].AA = function(a) {
        0 < this.fd[w] ? this.fd[this.fd[w] - 1].u.finish = a: this.u.finish = a
    };
    
    /**-------------------**/
    
    var Ua = {
        $s: function(a) {
            return a
        },
        reverse: function(a) {
            return 1 - a
        },
        Yn: function(a) {
            return a * a
        },
        uy: function(a) {
            return p.pow(a, 3)
        },
        xy: function(a) {
            return - (a * (a - 2))
        },
        wy: function(a) {
            return p.pow(a - 1, 3) + 1
        },
        vy: function(a) {
            return 0.5 > a ? 2 * a * a: -2 * (a - 2) * a - 1
        },
        XB: function(a) {
            return 0.5 > a ? 4 * p.pow(a, 3) : 4 * p.pow(a - 1, 3) + 1
        },
        YB: function(a) {
            return (1 - p.cos(p.PI * a)) / 2
        }
    };
    Ua["ease-in"] = Ua.Yn;
    Ua["ease-out"] = Ua.xy;
    
    
    var J = {
        Z: "http://api.map.baidu.com/images/",
        Gn: {
            "\u5317\u4eac": {
                wl: "bj",
                k: new K(116.403874, 39.914889)
            },
            "\u4e0a\u6d77": {
                wl: "sh",
                k: new K(121.487899, 31.249162)
            },
            "\u6df1\u5733": {
                wl: "sz",
                k: new K(114.025974, 22.546054)
            },
            "\u5e7f\u5dde": {
                wl: "gz",
                k: new K(113.30765, 23.120049)
            }
        },
        fontFamily: "arial,sans-serif"
    };
    if (C.O.Ke) 
    	C[x](J, {
	        bs: "url(" + J.Z + "ruler.cur),crosshair",
	        rb: "-moz-grab",
	        Bc: "-moz-grabbing"
    	}),
    	C.platform.Ts && (J.fontFamily = "arial,simsun,sans-serif");
    else if (C.O.Rx || C.O.rA) 
    	C[x](J, {
	        bs: "url(" + J.Z + "ruler.cur) 2 6,crosshair",
	        rb: "url(" + J.Z + "openhand.cur) 8 8,default",
	        Bc: "url(" + J.Z + "closedhand.cur) 8 8,move"
    	});
    else C[x](J, {
        bs: "url(" + J.Z + "ruler.cur),crosshair",
        rb: "url(" + J.Z + "openhand.cur),default",
        Bc: "url(" + J.Z + "closedhand.cur),move"
    });
    
    function Va(a, b) {
        var c = a.style;
        c.left = b[0] + "px";
        c.top = b[1] + "px"
    }
    function Wa(a) {
        0 < C.O.T ? a.unselectable = "on": a.style.MozUserSelect = "none"
    }
    function Xa(a) {
        return a && a[ka] && 11 != a[ka].nodeType
    }
    function Za(a, b) {
        C.w.No(a, "beforeEnd", b);
        return a.lastChild
    }
    //阻止事件冒泡，
    function pa(a) {
        a = window.event || a;
        a.stopPropagation ? a.stopPropagation() : a.cancelBubble = true
    }
    //阻止事件的默认行为，例如浏览器跳转，表单提交等
    function $a(a) {o
        a = window.event || a;
        a.preventDefault ? a.preventDefault() : a.returnValue = false;
        return l
    }
    //组织事件冒泡，同时阻止事件的默认行为
    function qa(a) {
        pa(a);
        return $a(a)
    }
    //应该卷帘的位置偏移，但是这两个值只有一个值是正确的。
    function ab() {
        var a = document.documentElement,
        b = da.body;
        return a && (a.scrollTop || a.scrollLeft) ? [a.scrollTop, a.scrollLeft] : b ? [b.scrollTop, b.scrollLeft] : [0, 0]
    }
    //两个点的对角线长度
    function bb(a, b) {
        if (a && b) 
        	return p.round(p.sqrt(p.pow(a.x - b.x, 2) + p.pow(a.y - b.y, 2)))
    }
    //这个应该是组织请求url的参数项呢
    function db(a, b) {
        var c = [],
        b = b || 
        function(a) {
            return a
        },
        d;
        for (d in a) 
        	c.push(d + "=" + b(a[d]));
        return c.join("&")
    }
    //用相关attribute创建一个element元素，可能带namespace
    function M(a, b, c) {
        var d = da.createElement(a);
        c && (d = da.createElementNS(c, a));
        return C.w.mp(d, b || {})
    }
    function Ea(a) {
        if (a.currentStyle) 
        	return a.currentStyle;
        if (a.ownerDocument && a.ownerDocument.defaultView) 
        	return a.ownerDocument.defaultView.getComputedStyle(a, k)
    }
    function Ga(a) {
        return "function" == typeof a
    }
    function Fa(a) {
        return "number" == typeof a
    }
    function Ha(a) {
        return "string" == typeof a
    }
    function eb(a) {
        return "undefined" != typeof a
    }
    function fb(a) {
        return "object" == typeof a
    }
    var gb = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    function hb(a) {
        var b = "",
        c,
        d,
        e = "",
        g,
        i = "",
        j = 0;
        g = /[^A-Za-z0-9\+\/\=]/g;
        if (!a || g.exec(a)) return a;
        a = a.replace(/[^A-Za-z0-9\+\/\=]/g, "");
        do c = gb.indexOf(a.charAt(j++)),
        d = gb.indexOf(a.charAt(j++)),
        g = gb.indexOf(a.charAt(j++)),
        i = gb.indexOf(a.charAt(j++)),
        c = c << 2 | d >> 4,
        d = (d & 15) << 4 | g >> 2,
        e = (g & 3) << 6 | i,
        b += String.fromCharCode(c),
        64 != g && (b += String.fromCharCode(d)),
        64 != i && (b += String.fromCharCode(e));
        while (j < a[w]);
        return b
    }
    var Q = C.lang.Ej;
    function Da() {
        return ! (!C.platform.Lz && !C.platform.Kz && !C.platform.Ms)
    }
    function Ia() {
        return (new Date).getTime()
    }
    function ib() {
        var a = da.body[v](M("div"));
        a.innerHTML = '<v:shape id="vml_tester1" adj="1" />';
        var b = a.firstChild;
        if (!b.style) return l;
        b.style.behavior = "url(#default#VML)";
        b = b ? "object" == typeof b.adj: f;
        a[ka][ga](a);
        return b
    }
    function kb() {
        return !! da.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Shape", "1.1")
    };
    function lb(a, b) {
        if (b) {
            var c = (1E5 * p.random()).toFixed(0);
            H._rd["_cbk" + c] = function(a) {
                b && b(a);
                delete H._rd["_cbk" + c]
            };
            a += "&callback=BMap._rd._cbk" + c
        }
        var d = M("script", {
            src: a,
            type: "text/javascript",
            charset: "utf-8"
        });
        if (d[B]) d[B]("load", 
        function(a) {
            a = a.target;
            a[ka][ga](a)
        },
        l);
        else 
        	d.attachEvent && d.attachEvent("onreadystatechange", 
        function() {
            var a = window.event.srcElement;
            if (a && ("loaded" == a.readyState || "complete" == a.readyState)) 
            	a[ka][ga](a)
        });
        setTimeout(function() {
            da.getElementsByTagName("head")[0][v](d);
            d = k
        },
        1)
    };
    var mb = {
        map: "20130813025141",
        common: "20130813025141",
        tile: "20130813025141",
        marker: "20130813025141",
        markeranimation: "20130813025141",
        poly: "20130813025141",
        draw: "20130813025141",
        drawbysvg: "20130813025141",
        drawbyvml: "20130813025141",
        drawbycanvas: "20130813025141",
        infowindow: "20130813025141",
        oppc: "20130813025141",
        opmb: "20130813025141",
        menu: "20130813025141",
        control: "20130813025141",
        navictrl: "20130813025141",
        geoctrl: "20130813025141",
        copyrightctrl: "20130813025141",
        scommon: "20130813025141",
        local: "20130813025141",
        route: "20130813025141",
        othersearch: "20130813025141",
        mapclick: "20130813025141",
        buslinesearch: "20130813025141",
        hotspot: "20130813025141",
        autocomplete: "20130813025141",
        coordtrans: "20130813025141",
        coordtransutils: "20130813025141",
        clayer: "20130813025141"
    };
    /*
     *本地存储加载js组件部分 
     * 返回单实例，用于控制localStorage内容
     * 不用考虑没有加载到的情况
     */
    
    
    C.Ml = function() {
    	//验证是否存在该key
    	//之所以要用两个！！，是因为是为了判断存在与否，如果没有两个！！则代表返回了key的字符串，而不是bool值了。
        function a(a) {
            return flag && !!local["BMap_" + a + "_" + mb[a]]
        }
        var b = "BMap_",
        local = window.localStorage,
        flag = "localStorage" in window && local !== null && local !== void 0;
        return {
            Oz: flag,
            set: function(key, value) {
                if (flag) {
                	//这个循环就是保证该key的各个版本的js文件删除掉
                	
                    for (var i = "BMap_" + key + "_", length = local["length"], n; length--;){ 
                    	//取得length的key值，
                    	n = local.key(length);
                    	//首先验证是否该key存在，如果存在删除掉
                    	-1 < n.indexOf(i) && local.removeItem(n);
                    }
                    try {
                        local.setItem("BMap_" + key + "_" + mb[a], value)
                    } catch(q) {
                        local.clear()
                    }
                }
            },
            //似乎不用考虑没有取到的情况
            get: function(key) {
                return flag && a(key) ? local.getItem("BMap_" + key + "_" + mb[key]) : false
            },
            Nr: a
        }
    } ();
    
    
    //L函数为一些基础工具对象
    
    function L() {}
    
															    
    
    C.object["extend"](L, {
        We: {
            Np: -1,
            Iu: 0,
            Oh: 1
        },
        
        //首先判断画图色手段，svg，vml还是canvas
        ss: function() {
            var a = "drawbysvg";
            //kb()函数验证是否支持svg作图，使用hasFuture方法
            kb() ? a = "drawbysvg": ib() ? a = "drawbyvml": M("canvas").getContext && (a = "drawbycanvas");
            return {
                control: [],
                marker: [],
                poly: ["marker", a],
                drawbysvg: ["draw"],
                drawbyvml: ["draw"],
                drawbycanvas: ["draw"],
                infowindow: ["common", "marker"],
                menu: [],
                oppc: [],
                opmb: [],
                scommon: [],
                local: ["scommon"],
                route: ["scommon"],
                othersearch: ["scommon"],
                autocomplete: ["scommon"],
                mapclick: ["scommon"],
                buslinesearch: ["route"],
                hotspot: [],
                coordtransutils: ["coordtrans"],
                clayer: ["tile"]
            }
        },
        JC: {},
        Ip: {
            Nu: "http://api.map.baidu.com/getmodules?v=1.5",
            qx: 5E3
        },
        Rn: l,
        Mb: {
            If: {},
            Qg: [],
            pk: []
        },
        load: function(a, b, c) {
        	//构造出一个模块的对象来
            var d = this.Di(a);
            //如果返回的d对象，的pb与we中oh相同时，则执行c&&b();不知道干嘛呀。。。在Di中是会赋值d的Pb值，也是用We中的值，
            //We中有三个值，Iu: 0 ，Np: -1，Oh: 1干嘛呢？？？？其中we也在L中
            
            if (d.Pb == this.We.Oh) 
            	c && b();
            else {
                if (d.Pb == this.We.Np) {
                	
                    this.Sr(a);
                    this.Ht(a);
                    var e = this;
                     e.Rn == l && (e.Rn = f, setTimeout(function() {
                        for (var a = [], b = 0, c = e.Mb.Qg[w]; b < c; b++) {
                            var d = e.Mb.Qg[b],
                            q = "";
                            ma.Ml.Nr(d) ? q = ma.Ml.get(d) : (q = "", a.push(d));
                            e.Mb.pk.push({
                                jt: d,
                                Xo: q
                            })
                        }
                        e.Rn = l;
                        e.Mb.Qg[w] = 0;
                        0 == a[w] ? e.hs() : lb(e.Ip.Nu + "&mod=" + a.join(","))
                    },
                    1));
                    //执行完上述动作之后，又将d中Pb变成we中的0;
                    d.Pb = this.We.Iu
                }
                d.Kj.push(b)
            }
        },
        Sr: function(a) {
        	
            if (a && this.ss()[a]) 
            	for (var a = this.ss()[a], b = 0; b < a.length; b++){ 
            		//循环？？？ss返回的时候一个对象集合，每个对象属性为一个数组，每个数组存放着相应的模块名字
            		this.Sr(a[b]);
            		this.Mb.If[a[b]] || this.Ht(a[b]);
            }
        },
        	//验证Mb对象的的Qg数组中是否存在a这个模块，如果存在就是跳出去，不存在的话，加入到Qg数组中
        
        	//Mb也在L中。
        Ht: function(a) {
        	
            for (var b = 0; b < this.Mb.Qg.length; b++) 
            	if (this.Mb.Qg[b] == a) 
            		return;
            this.Mb.Qg.push(a)
        },
        qA: function(a, b) {
            var c = this.Di(a);
            try {
                eval(b)
            } catch(d) {
                return
            }
            c.Pb = this.We.Oh;
            for (var e = 0, g = c.Kj[w]; e < g; e++) c.Kj[e]();
            c.Kj[w] = 0
        },
        Nr: function(a, b) {
            var c = this;
            c.timeout = setTimeout(function() {
                c.Mb.If[a].Pb != c.We.Oh ? (c.remove(a), c.load(a, b)) : clearTimeout(c.timeout)
            },
            c.Ip.qx)
        },
        
        
        //作用不明，在初始化地图时，一旦load map时，首先会在L.Mb.If中放一个map的对象，然后，
        //创建每个模块的对象，同时设置一个标志Pb,和一个Kj数组，其中这个数组使用来
        
        Di: function(a) {
        	
            this.Mb.If[a] || (this.Mb.If[a] = {},
            this.Mb.If[a].Pb = this.We.Np, this.Mb.If[a].Kj = []);
            return this.Mb.If[a]
        },
        remove: function(a) {
            delete this.Di(a)
        },
        Ox: function(a, b) {
            for (var c = this.Mb.pk, d = 0, e = c[w]; d < e; d++) if ("" == c[d].Xo) if (c[d].jt == a) c[d].Xo = b;
            else return;
            this.hs()
        },
        hs: function() {
            for (var a = this.Mb.pk, b = 0, c = a[w]; b < c; b++) this.qA(a[b].jt, a[b].Xo);
            this.Mb.pk[w] = 0
        }
    });
    function S(a, b) {
        this.x = a || 0;
        this.y = b || 0;
        this.x = this.x;
        this.y = this.y
    }
    S[u].Rb = function(a) {
        return a && a.x == this.x && a.y == this.y
    };
    function P(a, b) {
        this[y] = a || 0;
        this[A] = b || 0
    }
    P[u].Rb = function(a) {
        return a && this[y] == a[y] && this[A] == a[A]
    };
    //热点对象Hotspot
    function Oa(a, b) {
        a && (this.Vq = a, this.K = "spot" + Oa.K++, b = b || {},
        this.De = b.text || "", this.gk = b.offsets ? b.offsets.slice(0) : [5, 5, 5, 5], this.qr = b.userData || k, this.ae = b.minZoom || k, this.Zc = b.maxZoom || k)
    }
    Oa.K = 0;
    C[x](Oa[u], {
        ta: function(a) {
            this.ae == k && (this.ae = a.J.Hb);
            this.Zc == k && (this.Zc = a.J.hc)
        },
        ca: function(a) {
            a instanceof K && (this.Vq = a)
        },
        V: o("Vq"),
        pj: ba("De"),
        Go: o("De"),
        setUserData: ba("qr"),
        getUserData: o("qr")
    });
    
    function nb() {
        this.z = k;
        this.ab = "control";
        this.bb = this.Hr = f
    }
    C.lang.fa(nb, C.lang.oa, "Control");
    C[x](nb[u], {
        initialize: function(a) {
            this.z = a;
            if (this.A) return a.ja[v](this.A),
            this.A
        },
        kd: function(a) { ! this.A && (this.initialize && Ga(this.initialize)) && (this.A = this.initialize(a));
            this.u = this.u || {
                re: l
            };
            this.hn();
            this.kk();
            this.A && (this.A.li = this)
        },
        hn: function() {
            var a = this.A;
            if (a) {
                var b = a.style;
                b[la] = "absolute";
                b.zIndex = this.eq || "10";
                b.MozUserSelect = "none";
                b.WebkitTextSizeAdjust = "none";
                this.u.re || C.w.Za(a, "BMap_noprint");
                Da() || C.C(a, "contextmenu", qa)
            }
        },
        remove: function() {
            this.z = k;
            this.A && (this.A[ka] && this.A[ka][ga](this.A), this.A = this.A.li = k)
        },
        Ya: function() {
            this.A = Za(this.z.ja, "<div unselectable='on'></div>");
            this.bb == l && C.w.G(this.A);
            return this.A
        },
        kk: function() {
            this.wb(this.u.anchor)
        },
        wb: function(a) {
            if (this.SB || !Fa(a) || isNaN(a) || a < ob || 3 < a) a = this.defaultAnchor;
            this.u = this.u || {
                re: l
            };
            this.u.Y = this.u.Y || this.defaultOffset;
            var b = this.u.anchor;
            this.u.anchor = a;
            if (this.A) {
                var c = this.A,
                d = this.u.Y[y],
                e = this.u.Y[A];
                c.style.left = c.style.top = c.style.right = c.style.bottom = "auto";
                switch (a) {
                case ob:
                    c.style.top = e + "px";
                    c.style.left = d + "px";
                    break;
                case pb:
                    c.style.top = e + "px";
                    c.style.right = d + "px";
                    break;
                case qb:
                    c.style.bottom = e + "px";
                    c.style.left = d + "px";
                    break;
                case 3:
                    c.style.bottom = e + "px",
                    c.style.right = d + "px"
                }
                c = ["TL", "TR", "BL", "BR"];
                C.w.$b(this.A, "anchor" + c[b]);
                C.w.Za(this.A, "anchor" + c[a])
            }
        },
        mo: function() {
            return this.u.anchor
        },
        nc: function(a) {
            a instanceof P && (this.u = this.u || {
                re: l
            },
            this.u.Y = new P(a[y], a[A]), this.A && this.wb(this.u.anchor))
        },
        Me: function() {
            return this.u.Y
        },
        Cc: o("A"),
        show: function() {
            this.bb != f && (this.bb = f, this.A && C.w.show(this.A))
        },
        G: function() {
            this.bb != l && (this.bb = l, this.A && C.w.G(this.A))
        },
        isPrintable: function() {
            return !! this.u.re
        },
        Re: function() {
            return ! this.A && !this.z ? l: !!this.bb
        }
    });
    var ob = 0,
    pb = 1,
    qb = 2;
    function rb(a) {
        nb.call(this);
        a = a || {};
        this.u = {
            re: l,
            up: a.showZoomInfo || f,
            anchor: a.anchor,
            Y: a.offset,
            type: a.type
        };
        this.defaultAnchor = Da() ? 3: ob;
        this.defaultOffset = new P(10, 10);
        this.wb(a.anchor);
        this.Kg(a.type);
        this.yd()
    }
    C.lang.fa(rb, nb, "NavigationControl");
    C[x](rb[u], {
        initialize: function(a) {
            this.z = a;
            return this.A
        },
        Kg: function(a) {
            this.u.type = Fa(a) && 0 <= a && 3 >= a ? a: 0
        },
        vh: function() {
            return this.u.type
        },
        yd: function() {
            var a = this;
            L.load("navictrl", 
            function() {
                a.xd()
            })
        }
    });
    function tb(a) {
        nb.call(this);
        a = a || {};
        this.u = {
            anchor: a.anchor,
            Y: a.offset,
            NA: a.showAddressBar,
            fs: a.enableAutoLocation,
            ct: a.locationIcon
        };
        this.defaultAnchor = qb;
        this.defaultOffset = new P(0, 4);
        this.yd()
    }
    C.lang.fa(tb, nb, "GeolocationControl");
    C[x](tb[u], {
        initialize: function(a) {
            this.z = a;
            return this.A
        },
        yd: function() {
            var a = this;
            L.load("geoctrl", 
            function() {
                a.xd()
            })
        },
        getAddressComponent: function() {
            return this.Br || k
        },
        location: function() {
            this.u.fs = f
        }
    });
    function ub(a) {
        nb.call(this);
        a = a || {};
        this.u = {
            re: l,
            anchor: a.anchor,
            Y: a.offset
        };
        this.Na = [];
        this.defaultAnchor = qb;
        this.defaultOffset = new P(5, 2);
        this.wb(a.anchor);
        this.Hr = l;
        this.yd()
    }
    C.lang.fa(ub, nb, "CopyrightControl");
    C.object[x](ub[u], {
        initialize: function(a) {
            this.z = a;
            return this.A
        },
        xk: function(a) {
            if (a && Fa(a.id) && !isNaN(a.id)) {
                var b = {
                    bounds: k,
                    content: ""
                },
                c;
                for (c in a) b[c] = a[c];
                if (a = this.lg(a.id)) for (var d in b) a[d] = b[d];
                else this.Na.push(b)
            }
        },
        lg: function(a) {
            for (var b = 0, c = this.Na[w]; b < c; b++) if (this.Na[b].id == a) return this.Na[b]
        },
        qo: o("Na"),
        gp: function(a) {
            for (var b = 0, c = this.Na[w]; b < c; b++) this.Na[b].id == a && (r = this.Na.splice(b, 1), b--, c = this.Na[w])
        },
        yd: function() {
            var a = this;
            L.load("copyrightctrl", 
            function() {
                a.xd()
            })
        }
    });
    function vb(a) {
        nb.call(this);
        a = a || {};
        this.u = {
            re: l,
            size: a.size || new P(150, 150),
            padding: 5,
            qa: a.isOpen === f ? f: l,
            sB: 4,
            Y: a.offset,
            anchor: a.anchor
        };
        this.defaultAnchor = 3;
        this.defaultOffset = new P(0, 0);
        this.Vh = this.Wh = 13;
        this.wb(a.anchor);
        this.sd(this.u.size);
        this.yd()
    }
    C.lang.fa(vb, nb, "OverviewMapControl");
    C[x](vb[u], {
        initialize: function(a) {
            this.z = a;
            return this.A
        },
        wb: function(a) {
            nb[u].wb.call(this, a)
        },
        dc: function() {
            this.dc.bh = f;
            this.u.qa = !this.u.qa;
            this.A || (this.dc.bh = l)
        },
        sd: function(a) {
            a instanceof P || (a = new P(150, 150));
            a[y] = 0 < a[y] ? a[y] : 150;
            a[A] = 0 < a[A] ? a[A] : 150;
            this.u.size = a
        },
        Sb: function() {
            return this.u.size
        },
        qa: function() {
            return this.u.qa
        },
        yd: function() {
            var a = this;
            L.load("control", 
            function() {
                a.xd()
            })
        }
    });
    function wb(a) {
        nb.call(this);
        a = a || {};
        this.u = {
            re: l,
            color: "black",
            vd: "metric",
            Y: a.offset
        };
        this.defaultAnchor = qb;
        this.defaultOffset = new P(81, 18);
        this.wb(a.anchor);
        this.be = {
            metric: {
                name: "metric",
                Tr: 1,
                Ks: 1E3,
                ju: "\u7c73",
                ku: "\u516c\u91cc"
            },
            us: {
                name: "us",
                Tr: 3.2808,
                Ks: 5280,
                ju: "\u82f1\u5c3a",
                ku: "\u82f1\u91cc"
            }
        };
        this.be[this.u.vd] || (this.u.vd = "metric");
        this.br = k;
        this.Pq = {};
        this.yd()
    }
    C.lang.fa(wb, nb, "ScaleControl");
    C.object[x](wb[u], {
        initialize: function(a) {
            this.z = a;
            return this.A
        },
        np: function(a) {
            this.u.color = a + ""
        },
        dC: function() {
            return this.u.color
        },
        sp: function(a) {
            this.u.vd = this.be[a] && this.be[a].name || this.u.vd
        },
        pz: function() {
            return this.u.vd
        },
        yd: function() {
            var a = this;
            L.load("control", 
            function() {
                a.xd()
            })
        }
    });
    var xb = 0;
    function yb(a) {
        nb.call(this);
        a = a || {};
        this.defaultAnchor = pb;
        this.defaultOffset = new P(10, 10);
        this.u = {
            re: l,
            Nd: [xa, Aa, Ba, ya],
            type: a.type || xb,
            Y: a.offset || this.defaultOffset,
            aC: f
        };
        this.wb(a.anchor);
        "[object Array]" == Object[u].toString.call(a.mapTypes) && (this.u.Nd = a.mapTypes.slice(0));
        this.yd()
    }
    C.lang.fa(yb, nb, "MapTypeControl");
    C.object[x](yb[u], {
        initialize: function(a) {
            this.z = a;
            return this.A
        },
        yd: function() {
            var a = this;
            L.load("control", 
            function() {
                a.xd()
            })
        }
    });
    function zb(a) {
        C.lang.oa.call(this);
        this.u = {
            ja: k,
            cursor: "default"
        };
        this.u = C[x](this.u, a);
        this.ab = "contextmenu";
        this.z = k;
        this.W = [];
        this.ad = [];
        this.tc = [];
        this.Mk = this.Ci = k;
        this.$d = l;
        var b = this;
        L.load("menu", 
        function() {
            b.Ob()
        })
    }
    C.lang.fa(zb, C.lang.oa, "ContextMenu");
    C.object[x](zb[u], {
        ta: function(a, b) {
            this.z = a;
            this.Mf = b || k
        },
        remove: function() {
            this.z = this.Mf = k
        },
        zk: function(a) {
            if (a && !("menuitem" != a.ab || "" == a.De || 0 >= a.sx)) {
                for (var b = 0, c = this.W[w]; b < c; b++) if (this.W[b] === a) return;
                this.W.push(a);
                this.ad.push(a)
            }
        },
        removeItem: function(a) {
            if (a && "menuitem" == a.ab) {
                for (var b = 0, c = this.W[w]; b < c; b++) this.W[b] === a && (this.W[b].remove(), this.W.splice(b, 1), c--);
                b = 0;
                for (c = this.ad[w]; b < c; b++) this.ad[b] === a && (this.ad[b].remove(), this.ad.splice(b, 1), c--)
            }
        },
        xn: function() {
            this.W.push({
                ab: "divider",
                Ze: this.tc[w]
            });
            this.tc.push({
                w: k
            })
        },
        hp: function(a) {
            if (this.tc[a]) {
                for (var b = 0, c = this.W[w]; b < c; b++) this.W[b] && ("divider" == this.W[b].ab && this.W[b].Ze == a) && (this.W.splice(b, 1), c--),
                this.W[b] && ("divider" == this.W[b].ab && this.W[b].Ze > a) && this.W[b].Ze--;
                this.tc.splice(a, 1)
            }
        },
        Cc: o("A"),
        show: function() {
            this.$d != f && (this.$d = f)
        },
        G: function() {
            this.$d != l && (this.$d = l)
        },
        yA: function(a) {
            a && (this.u.cursor = a)
        },
        getItem: function(a) {
            return this.ad[a]
        }
    });
    function Ab(a, b, c) {
        if (a && Ga(b)) {
            C.lang.oa.call(this);
            this.u = {
                width: 100,
                id: ""
            };
            c = c || {};
            this.u[y] = 1 * c.width ? c.width: 100;
            this.u.id = c.id ? c.id: "";
            this.De = a + "";
            this.Sg = b;
            this.z = k;
            this.ab = "menuitem";
            this.A = this.Vd = k;
            this.Xd = f;
            var d = this;
            L.load("menu", 
            function() {
                d.Ob()
            })
        }
    }
    C.lang.fa(Ab, C.lang.oa, "MenuItem");
    C.object[x](Ab[u], {
        ta: function(a, b) {
            this.z = a;
            this.Vd = b
        },
        remove: function() {
            this.z = this.Vd = k
        },
        pj: function(a) {
            a && (this.De = a + "")
        },
        Cc: o("A"),
        enable: function() {
            this.Xd = f
        },
        disable: function() {
            this.Xd = l
        }
    });
    function La(a, b) {
        a && !b && (b = a);
        this.wc = this.vc = this.zc = this.yc = this.Tf = this.Lf = k;
        a && (this.Tf = new K(a.lng, a.lat), this.Lf = new K(b.lng, b.lat), this.zc = a.lng, this.yc = a.lat, this.wc = b.lng, this.vc = b.lat)
    }
    C.object[x](La[u], {
        Qe: function() {
            return ! this.Tf || !this.Lf
        },
        Rb: function(a) {
            return ! (a instanceof La) || this.Qe() ? l: this.Id().Rb(a.Id()) && this.Hd().Rb(a.Hd())
        },
        Id: o("Tf"),
        Hd: o("Lf"),
        Yx: function(a) {
            return ! (a instanceof La) || this.Qe() || a.Qe() ? l: a.zc > this.zc && a.wc < this.wc && a.yc > this.yc && a.vc < this.vc
        },
        Ia: function() {
            return this.Qe() ? k: new K((this.zc + this.wc) / 2, (this.yc + this.vc) / 2)
        },
        Ls: function(a) {
            if (! (a instanceof La) || p.max(a.zc, a.wc) < p.min(this.zc, this.wc) || p.min(a.zc, a.wc) > p.max(this.zc, this.wc) || p.max(a.yc, a.vc) < p.min(this.yc, this.vc) || p.min(a.yc, a.vc) > p.max(this.yc, this.vc)) return k;
            var b = p.max(this.zc, a.zc),
            c = p.min(this.wc, a.wc),
            d = p.max(this.yc, a.yc),
            a = p.min(this.vc, a.vc);
            return new La(new K(b, d), new K(c, a))
        },
        Zx: function(a) {
            return ! (a instanceof K) || this.Qe() ? l: a.lng >= this.zc && a.lng <= this.wc && a.lat >= this.yc && a.lat <= this.vc
        },
        extend: function(a) {
            if (a instanceof K) {
                var b = a.lng,
                a = a.lat;
                this.Tf || (this.Tf = new K(0, 0));
                this.Lf || (this.Lf = new K(0, 0));
                if (!this.zc || this.zc > b) this.Tf.lng = this.zc = b;
                if (!this.wc || this.wc < b) this.Lf.lng = this.wc = b;
                if (!this.yc || this.yc > a) this.Tf.lat = this.yc = a;
                if (!this.vc || this.vc < a) this.Lf.lat = this.vc = a
            }
        },
        Ap: function() {
            return this.Qe() ? new K(0, 0) : new K(p.abs(this.wc - this.zc), p.abs(this.vc - this.yc))
        }
    });
    function K(a, b) {
        isNaN(a) && (a = hb(a), a = isNaN(a) ? 0: a);
        Ha(a) && (a = fa(a));
        isNaN(b) && (b = hb(b), b = isNaN(b) ? 0: b);
        Ha(b) && (b = fa(b));
        this.lng = a;
        this.lat = b
    }
    K.Ns = function(a) {
        return a && 180 >= a.lng && -180 <= a.lng && 74 >= a.lat && -74 <= a.lat
    };
    K[u].Rb = function(a) {
        return a && this.lat == a.lat && this.lng == a.lng
    };
    //Bp经纬度与像素相互转换时，抛出异常
    function Bb() {}
    Bb.prototype.ll = function() {
        throw "lngLatToPoint\u65b9\u6cd5\u672a\u5b9e\u73b0";
    };
    Bb.prototype.Al = function() {
        throw "pointToLngLat\u65b9\u6cd5\u672a\u5b9e\u73b0";
    };
    
    
    function Cb() {};
    var Ka = {
        Vr: function(a, b, c) {
            L.load("coordtransutils", 
            function() {
                Ka.Gx(a, b, c)
            },
            f)
        },
        Ur: function(a, b, c) {
            L.load("coordtransutils", 
            function() {
                Ka.Fx(a, b, c)
            },
            f)
        }
    };
    //似乎是工具类，其原型用经纬度转换像素异常类作为原型
    function T() {}
    
    T.prototype = new Bb;
    
   	C["extend"](T, {
        tu: 6370996.81,
        Qp: [1.289059486E7, 8362377.87, 5591021, 3481989.83, 1678043.12, 0],
        Gj: [75, 60, 45, 30, 15, 0],
        wu: [[1.410526172116255E-8, 8.98305509648872E-6, -1.9939833816331, 200.9824383106796, -187.2403703815547, 91.6087516669843, -23.38765649603339, 2.57121317296198, -0.03801003308653, 1.73379812E7], [ -7.435856389565537E-9, 8.983055097726239E-6, -0.78625201886289, 96.32687599759846, -1.85204757529826, -59.36935905485877, 47.40033549296737, -16.50741931063887, 2.28786674699375, 1.026014486E7], [ -3.030883460898826E-8, 8.98305509983578E-6, 0.30071316287616, 59.74293618442277, 7.357984074871, -25.38371002664745, 13.45380521110908, -3.29883767235584, 0.32710905363475, 6856817.37], [ -1.981981304930552E-8, 8.983055099779535E-6, 0.03278182852591, 40.31678527705744, 0.65659298677277, -4.44255534477492, 0.85341911805263, 0.12923347998204, -0.04625736007561, 4482777.06], [3.09191371068437E-9, 8.983055096812155E-6, 6.995724062E-5, 23.10934304144901, -2.3663490511E-4,-0.6321817810242, -0.00663494467273, 0.03430082397953, -0.00466043876332, 2555164.4], [2.890871144776878E-9, 8.983055095805407E-6, -3.068298E-8, 7.47137025468032, -3.53937994E-6, -0.02145144861037, -1.234426596E-5, 1.0322952773E-4, -3.23890364E-6, 826088.5]],
        Op: [[ -0.0015702102444, 111320.7020616939, 1704480524535203, -10338987376042340, 26112667856603880, -35149669176653700, 26595700718403920, -10725012454188240, 1800819912950474, 82.5], [8.277824516172526E-4, 111320.7020463578, 6.477955746671607E8, -4.082003173641316E9, 1.077490566351142E10, -1.517187553151559E10, 1.205306533862167E10, -5.124939663577472E9, 9.133119359512032E8, 67.5], [0.00337398766765, 111320.7020202162, 4481351.045890365, -2.339375119931662E7, 7.968221547186455E7, -1.159649932797253E8, 9.723671115602145E7, -4.366194633752821E7, 8477230.501135234, 52.5], [0.00220636496208, 111320.7020209128, 51751.86112841131, 3796837.749470245, 992013.7397791013, -1221952.21711287, 1340652.697009075, -620943.6990984312, 144416.9293806241, 37.5], [ -3.441963504368392E-4, 111320.7020576856, 278.2353980772752, 2485758.690035394, 6070.750963243378, 54821.18345352118, 9540.606633304236, -2710.55326746645, 1405.483844121726, 22.5], [ -3.218135878613132E-4, 111320.7020701615, 0.00369383431289, 823725.6402795718, 0.46104986909093, 2351.343141331292, 1.58060784298199, 8.77738589078284, 0.37238884252424, 7.45]],
        cC: function(a, b) {
            if (!a || !b) return 0;
            var c,
            d,
            a = this.Ra(a);
            if (!a) return 0;
            c = this.yf(a.lng);
            d = this.yf(a.lat);
            b = this.Ra(b);
            return ! b ? 0: this.Oc(c, this.yf(b.lng), d, this.yf(b.lat))

        },
        //计算两个两个经纬度点的距离，单位米，a，b均是point对象
        ro: function(a, b) {
            if (!a || !b) return 0;
            
            a.lng = this.yo(a.lng, -180, 180);
            a.lat = this.Do(a.lat, -74, 74);
            b.lng = this.yo(b.lng, -180, 180);
            b.lat = this.Do(b.lat, -74, 74);
            
            return this.Oc(this.yf(a.lng), this.yf(b.lng), this.yf(a.lat), this.yf(b.lat))

        },
        Ra: function(a) {
            var b,
            c;
            b = new K(p.abs(a.lng), p.abs(a.lat));
            for (var d = 0; d < this.Qp[w]; d++) if (b.lat >= this.Qp[d]) {
                c = this.wu[d];
                break

            }
            a = this.Vr(a, c);
            return a = new K(a.lng.toFixed(6), a.lat.toFixed(6))

        },
        //作用好像是将经纬度转换为栅格图的像素位置
        Wa: function(a) {
            var b, c;
            a.lng = this.yo(a.lng, -180, 180);
            a.lat = this.Do(a.lat, -74, 74);
            b = new K(a.lng, a.lat);
            for (var d = 0; d < this.Gj.length; d++) 
            	if (b.lat >= this.Gj[d]) {
	                c = this.Op[d];
	                break
            	}
            if (!c) for (d = this.Gj[w] - 1; 0 <= d; d--) if (b.lat <= -this.Gj[d]) {
                c = this.Op[d];
                break

            }
            a = this.Vr(a, c);
            return a = new K(a.lng.toFixed(2), a.lat.toFixed(2))

        },
        Vr: function(a, b) {
            if (a && b) {
                var c = b[0] + b[1] * p.abs(a.lng),
                d = p.abs(a.lat) / b[9],
                d = b[2] + b[3] * d + b[4] * d * d + b[5] * d * d * d + b[6] * d * d * d * d + b[7] * d * d * d * d * d + b[8] * d * d * d * d * d * d,
                c = c * (0 > a.lng ? -1: 1),
                d = d * (0 > a.lat ? -1: 1);
                return new K(c, d)

            }

        },
        Oc: function(a, b, c, d) {
            return this.tu * p.acos(p.sin(c) * p.sin(d) + p.cos(c) * p.cos(d) * p.cos(b - a))

        },
        yf: function(a) {
            return p.PI * a / 180

        },
        QC: function(a) {
            return 180 * a / p.PI

        },
        Do: function(a, b, c) {
            b != k && (a = p.max(a, b));
            c != k && (a = p.min(a, c));
            return a

        },
        yo: function(a, b, c) {
            for (; a > c;) 
            	a -= c - b;
            for (; a < b;) 
            	a += c - b;
            return a

        }

    });
   	//在其原型里，添加几个函数
    C[x](T[u], {
        yg: function(a) {
            return T.Wa(a)
        },
        ll: function(a) {
            a = T.Wa(a);
            return new S(a.lng, a.lat)
        },
        pf: function(a) {
            return T.Ra(a)
        },
        Al: function(a) {
            a = new K(a.x, a.y);
            return T.Ra(a)
        },
        
        /*
         * 这个函数不知道干嘛用的
         * @param {Object} a
         * @param {Object} b
         * @param {Object} c
         * @param {Object} d
         * @param {Object} e
         * @memberOf {TypeName} 
         * @return {TypeName} 
         */
        $a: function(a, b, c, d, e) {
            if (a) 
            	return a = this.yg(a, e),
            b = this.ob(b),
            new S(p.round((a.lng - c.lng) / b + d[y] / 2), p.round((c.lat - a.lat) / b + d[A] / 2))
        },
        Ma: function(a, b, c, d, e) {
            if (a) return b = this.ob(b),
            this.pf(new K(c.lng + b * (a.x - d[y] / 2), c.lat - b * (a.y - d[A] / 2)), e)
        },
        ob: function(a) {
            return p.pow(2, 18 - a)
        }
    });
    
    
    
    function Na() {
        this.Ln = "bj"
    }
    Na[u] = new T;
    C[x](Na[u], {
        yg: function(a, b) {
            return this.$u(b, T.Wa(a))
        },
        pf: function(a, b) {
            return T.Ra(this.av(b, a))
        },
        lngLatToPointFor3D: function(a, b) {
            var c = this,
            d = T.Wa(a);
            L.load("coordtrans", 
            function() {
                var a = Cb.Bo(c.Ln || "bj", d),
                a = new S(a.x, a.y);
                b && b(a)
            },
            f)
        },
        pointToLngLatFor3D: function(a, b) {
            var c = this,
            d = new K(a.x, a.y);
            L.load("coordtrans", 
            function() {
                var a = Cb.Ao(c.Ln || "bj", d),
                a = new K(a.lng, a.lat),
                a = T.Ra(a);
                b && b(a)
            },
            f)
        },
        $u: function(a, b) {
            if (L.Di("coordtrans").Pb == L.We.Oh) {
                var c = Cb.Bo(a || "bj", b);
                return new K(c.x, c.y)
            }
            L.load("coordtrans", m());
            return new K(0, 0)
        },
        av: function(a, b) {
            if (L.Di("coordtrans").Pb == L.We.Oh) {
                var c = Cb.Ao(a || "bj", b);
                return new K(c.lng, c.lat)
            }
            L.load("coordtrans", m());
            return new K(0, 0)
        },
        ob: function(a) {
            return p.pow(2, 20 - a)
        }
    });
    function Db() {
        this.ab = "overlay"
    }
    C.lang.fa(Db, C.lang.oa, "Overlay");
    Db.Vi = function(a) {
        a *= 1;
        return ! a ? 0: -1E5 * a << 1
    };
    C[x](Db[u], {
        kd: function(a) {
            if (!this.F && Ga(this.initialize) && (this.F = this.initialize(a))) this.F.style.WebkitUserSelect = "none";
            this.draw()
        },
        initialize: function() {
            throw "initialize\u65b9\u6cd5\u672a\u5b9e\u73b0";
        },
        draw: function() {
            throw "draw\u65b9\u6cd5\u672a\u5b9e\u73b0";
        },
        remove: function() {
            if (this.F && this.F[ka]) this.F[ka][ga](this.F);
            this.F = k;
            this.dispatchEvent(new Q("onremove"))
        },
        G: function() {
            this.F && C.w.G(this.F)
        },
        show: function() {
            this.F && C.w.show(this.F)
        },
        Re: function() {
            return ! this.F || "none" == this.F.style.display || "hidden" == this.F.style.visibility ? l: f
        }
    });
    H.Ec(function(a) {
        function b(a, b) {
            var c = M("div"),
            i = c.style;
            i[la] = "absolute";
            i.top = i.left = i[y] = i[A] = "0";
            i.zIndex = b;
            a[v](c);
            return c
        }
        var c = a.B;
        c.Uc = a.Uc = b(a.platform, 200);
        a.cc.ks = b(c.Uc, 800);
        a.cc.Vo = b(c.Uc, 700);
        a.cc.ls = b(c.Uc, 600);
        a.cc.Xs = b(c.Uc, 500);
        a.cc.ft = b(c.Uc, 400);
        a.cc.gt = b(c.Uc, 300);
        a.cc.pB = b(c.Uc, 201);
        a.cc.nl = b(c.Uc, 200)
    });
    function Ma() {
        C.lang.oa.call(this);
        Db.call(this);
        this.map = k;
        this.bb = f;
        this.cb = k;
        this.mq = 0
    }
    C.lang.fa(Ma, Db, "OverlayInternal");
    C[x](Ma[u], {
        initialize: function(a) {
            this.map = a;
            C.lang.oa.call(this, this.K);
            return k
        },
        zo: o("map"),
        draw: m(),
        remove: function() {
            this.map = k;
            C.lang.Ok(this.K);
            Db[u].remove.call(this)
        },
        G: function() {
            this.bb != l && (this.bb = l)
        },
        show: function() {
            this.bb != f && (this.bb = f)
        },
        Re: function() {
            return ! this.F ? l: !!this.bb
        },
        Fd: o("F"),
        Pt: function(a) {
            var a = a || {},
            b;
            for (b in a) this.v[b] = a[b]
        },
        Il: ba("zIndex"),
        kf: function() {
            this.v.kf = f
        },
        my: function() {
            this.v.kf = l
        },
        hh: ba("Zg"),
        Dh: function() {
            this.Zg = k
        }
    });
    function Eb() {
        this.map = k;
        this.X = {};
        this.rc = []
    }
    H.Ec(function(a) {
        var b = new Eb;
        b.map = a;
        a.X = b.X;
        a.rc = b.rc;
        a[B]("load", 
        function(a) {
            b.draw(a)
        });
        a[B]("moveend", 
        function(a) {
            b.draw(a)
        });
        if (C.O.T && 8 > C.O.T || "BackCompat" == da.compatMode) a[B]("zoomend", 
        function(a) {
            setTimeout(function() {
                b.draw(a)
            },
            20)
        });
        else a[B]("zoomend", 
        function(a) {
            b.draw(a)
        });
        a[B]("maptypechange", 
        function(a) {
            b.draw(a)
        });
        a[B]("addoverlay", 
        function(a) {
            a = a.target;
            if (a instanceof Ma) b.X[a.K] || (b.X[a.K] = a);
            else {
                for (var d = l, e = 0, g = b.rc[w]; e < g; e++) if (b.rc[e] === a) {
                    d = f;
                    break
                }
                d || b.rc.push(a)
            }
        });
        a[B]("removeoverlay", 
        function(a) {
            a = a.target;
            if (a instanceof Ma) delete b.X[a.K];
            else for (var d = 0, e = b.rc[w]; d < e; d++) if (b.rc[d] === a) {
                b.rc.splice(d, 1);
                break
            }
        });
        a[B]("clearoverlays", 
        function() {
            this.Eb();
            for (var a in b.X) b.X[a].v.kf && (b.X[a].remove(), delete b.X[a]);
            a = 0;
            for (var d = b.rc[w]; a < d; a++) b.rc[a].kf != l && (b.rc[a].remove(), b.rc[a] = k, b.rc.splice(a, 1), a--, d--)
        });
        a[B]("infowindowopen", 
        function() {
            var a = this.cb;
            a && (C.w.G(a.kb), C.w.G(a.Ta))
        });
        a[B]("movestart", 
        function() {
            this.Le() && this.Le().ax()
        });
        a[B]("moveend", 
        function() {
            this.Le() && this.Le().Sw()
        })
    });
    Eb[u].draw = function() {
        for (var a in this.X) 
        	this.X[a].draw();
        C.Qb.Dd(this.rc, 
        function(a) {
            a.draw()
        });
        this.map.B.za && this.map.B.za.ca();
        H.Dj && H.Dj.Ni(this.map).pp()
    };
    function Fb(a) {
        Ma.call(this);
        a = a || {};
        this.v = {
            strokeColor: a.strokeColor || "#3a6bdb",
            Rd: a.strokeWeight || 5,
            td: a.strokeOpacity || 0.65,
            strokeStyle: a.strokeStyle || "solid",
            kf: a.enableMassClear === l ? l: f,
            mf: k,
            pg: k,
            dd: a.enableEditing === f ? f: l,
            mt: 5,
            lB: l,
            Jc: a.enableClicking === l ? l: f
        };
        0 >= this.v.Rd && (this.v.Rd = 5);
        if (0 > this.v.td || 1 < this.v.td) this.v.td = 0.65;
        if (0 > this.v.ig || 1 < this.v.ig) this.v.ig = 0.65;
        "solid" != this.v.strokeStyle && "dashed" != this.v.strokeStyle && (this.v.strokeStyle = "solid");
        this.F = k;
        this.cm = new La(0, 0);
        this.Hc = [];
        this.Ua = [];
        this.ga = {}
    }
    C.lang.fa(Fb, Ma, "Graph");
    Fb.Yk = function(a) {
        var b = [];
        if (!a) return b;
        Ha(a) && C.Qb.Dd(a.split(";"), 
        function(a) {
            a = a.split(",");
            b.push(new K(a[0], a[1]))
        });
        "[object Array]" == Object[u].toString.apply(a) && 0 < a[w] && (b = a);
        return b
    };
    Fb.bp = [0.09, 0.005, 1.0E-4, 1.0E-5];
    C[x](Fb[u], {
        initialize: function(a) {
            this.map = a;
            return k
        },
        draw: m(),
        ti: function(a) {
            this.Hc[w] = 0;
            this.R = Fb.Yk(a).slice(0);
            this.Td()
        },
        oc: function(a) {
            this.ti(a)
        },
        Td: function() {
            if (this.R) {
                var a = this;
                a.cm = new La;
                C.Qb.Dd(this.R, 
                function(b) {
                    a.cm[x](b)
                })
            }
        },
        gc: o("R"),
        Jg: function(a, b) {
            b && this.R[a] && (this.Hc[w] = 0, this.R[a] = new K(b.lng, b.lat), this.Td())
        },
        setStrokeColor: function(a) {
            this.v.strokeColor = a
        },
        hz: function() {
            return this.v.strokeColor
        },
        oj: function(a) {
            0 < a && (this.v.Rd = a)
        },
        Ds: function() {
            return this.v.Rd
        },
        mj: function(a) {
            a == aa || (1 < a || 0 > a) || (this.v.td = a)
        },
        iz: function() {
            return this.v.td
        },
        El: function(a) {
            1 < a || 0 > a || (this.v.ig = a)
        },
        Qy: function() {
            return this.v.ig
        },
        nj: function(a) {
            "solid" != a && "dashed" != a || (this.v.strokeStyle = a)
        },
        Cs: function() {
            return this.v.strokeStyle
        },
        setFillColor: function(a) {
            this.v.fillColor = a || ""
        },
        Py: function() {
            return this.v.fillColor
        },
        lf: o("cm"),
        remove: function() {
            this.map && this.map.removeEventListener("onmousemove", this.Yj);
            Ma[u].remove.call(this);
            this.Hc[w] = 0
        },
        dd: function() {
            if (! (2 > this.R[w])) {
                this.v.dd = f;
                var a = this;
                L.load("poly", 
                function() {
                    a.Yf()
                },
                f)
            }
        },
        ly: function() {
            this.v.dd = l;
            var a = this;
            L.load("poly", 
            function() {
                a.ff()
            },
            f)
        }
    });
    function Hb(a) {
        Ma.call(this);
        this.F = this.map = k;
        this.v = {
            width: 0,
            height: 0,
            Y: new P(0, 0),
            opacity: 1,
            background: "transparent",
            kl: 1,
            Zs: "#000",
            Tz: "solid",
            N: k
        };
        this.Pt(a);
        this.N = this.v.N
    }
    C.lang.fa(Hb, Ma, "Division");
    C[x](Hb[u], {
        Rh: function() {
            var a = this.v,
            b = this.content,
            c = ['<div class="BMap_Division" style="position:absolute;'];
            c.push("width:" + a[y] + "px;display:block;");
            c.push("overflow:hidden;");
            "none" != a.borderColor && c.push("border:" + a.kl + "px " + a.Tz + " " + a.Zs + ";");
            c.push("opacity:" + a.opacity + "; filter:(opacity=" + 100 * a.opacity + ")");
            c.push("background:" + a.background + ";");
            c.push('z-index:60;">');
            c.push(b);
            c.push("</div>");
            this.F = Za(this.map.ge().Vo, c.join(""))
        },
        initialize: function(a) {
            this.map = a;
            this.Rh();
            this.F && C.C(this.F, Da() ? "touchstart": "mousedown", 
            function(a) {
                pa(a)
            });
            return this.F
        },
        draw: function() {
            var a = this.map.Pd(this.v.N);
            this.v.Y = new P( - p.round(this.v[y] / 2) - p.round(this.v.kl), -p.round(this.v[A] / 2) - p.round(this.v.kl));
            this.F.style.left = a.x + this.v.Y[y] + "px";
            this.F.style.top = a.y + this.v.Y[A] + "px"
        },
        V: function() {
            return this.v.N
        },
        KB: function() {
            return this.map.$a(this.V())
        },
        ca: function(a) {
            this.v.N = a;
            this.draw()
        },
        zA: function(a, b) {
            this.v[y] = p.round(a);
            this.v[A] = p.round(b);
            this.F && (this.F.style[y] = this.v[y] + "px", this.F.style[A] = this.v[A] + "px", this.draw())
        }
    });
    function Ib(a, b, c) {
        a && b && (this.imageUrl = a, this.size = b, a = new P(p.floor(b[y] / 2), p.floor(b[A] / 2)), c = c || {},
        a = c.anchor || a, b = c.imageOffset || new P(0, 0), this.imageSize = c.imageSize, this.anchor = a, this.imageOffset = b, this.infoWindowAnchor = c.infoWindowAnchor || this.anchor, this.printImageUrl = c.printImageUrl || "")
    }
    C[x](Ib[u], {
        DA: function(a) {
            a && (this.imageUrl = a)
        },
        KA: function(a) {
            a && (this.printImageUrl = a)
        },
        sd: function(a) {
            a && (this.size = new P(a[y], a[A]))
        },
        wb: function(a) {
            a && (this.anchor = new P(a[y], a[A]))
        },
        jj: function(a) {
            a && (this.imageOffset = new P(a[y], a[A]))
        },
        EA: function(a) {
            a && (this.infoWindowAnchor = new P(a[y], a[A]))
        },
        CA: function(a) {
            a && (this.imageSize = new P(a[y], a[A]))
        },
        toString: ca("Icon")
    });
    function Jb(a, b) {
        C.lang.oa.call(this);
        this.content = a;
        this.map = k;
        b = b || {};
        this.v = {
            width: b.width || 0,
            height: b.height || 0,
            maxWidth: b.maxWidth || 600,
            Y: b.offset || new P(0, 0),
            title: b.title || "",
            Wo: b.maxContent || "",
            Ed: b.enableMaximize || l,
            Ii: b.enableAutoPan === l ? l: f,
            Zn: b.enableCloseOnClick === l ? l: f,
            margin: [10, 10, 40, 10],
            Hk: [[10, 10], [10, 10], [10, 10], [10, 10]],
            Dz: l,
            xC: ca(f),
            bo: b.enableMessage === l ? l: f,
            message: b.message,
            eo: b.enableSearchTool === f ? f: l
        };
        0 != this.v[y] && (220 > this.v[y] && (this.v[y] = 220), 730 < this.v[y] && (this.v[y] = 730));
        0 != this.v[A] && (60 > this.v[A] && (this.v[A] = 60), 650 < this.v[A] && (this.v[A] = 650));
        if (0 != this.v.maxWidth && (220 > this.v.maxWidth && (this.v.maxWidth = 220), 730 < this.v.maxWidth)) this.v.maxWidth = 730;
        this.Tb = l;
        this.ue = J.Z;
        this.ya = k;
        var c = this;
        L.load("infowindow", 
        function() {
            c.Ob()
        })
    }
    C.lang.fa(Jb, C.lang.oa, "InfoWindow");
    C[x](Jb[u], {
        setWidth: function(a) { ! a && 0 != a || (isNaN(a) || 0 > a) || (0 != a && (220 > a && (a = 220), 730 < a && (a = 730)), this.v[y] = a)
        },
        setHeight: function(a) { ! a && 0 != a || (isNaN(a) || 0 > a) || (0 != a && (60 > a && (a = 60), 650 < a && (a = 650)), this.v[A] = a)
        },
        Rt: function(a) { ! a && 0 != a || (isNaN(a) || 0 > a) || (0 != a && (220 > a && (a = 220), 730 < a && (a = 730)), this.v.maxWidth = a)
        },
        xb: function(a) {
            this.v.title = a
        },
        getTitle: function() {
            return this.v.title
        },
        ac: ba("content"),
        qs: o("content"),
        kj: function(a) {
            this.v.Wo = a + ""
        },
        Zb: m(),
        Ii: function() {
            this.v.Ii = f
        },
        disableAutoPan: function() {
            this.v.Ii = l
        },
        enableCloseOnClick: function() {
            this.v.Zn = f
        },
        disableCloseOnClick: function() {
            this.v.Zn = l
        },
        Ed: function() {
            this.v.Ed = f
        },
        Qk: function() {
            this.v.Ed = l
        },
        show: function() {
            this.bb = f
        },
        G: function() {
            this.bb = l
        },
        close: function() {
            this.G()
        },
        ol: function() {
            this.Tb = f
        },
        restore: function() {
            this.Tb = l
        },
        Re: function() {
            return this.qa()
        },
        qa: ca(l),
        V: function() {
            if (this.ya && this.ya.V) return this.ya.V()
        },
        Me: function() {
            return this.v.Y
        }
    });
    wa[u].Xb = function(a, b) {
        if (a instanceof Jb && b instanceof K) {
            var c = this.B;
            c.zg ? c.zg.ca(b) : (c.zg = new U(b, {
                icon: new Ib(J.Z + "blank.gif", {
                    width: 1,
                    height: 1
                }),
                offset: new P(0, 0),
                clickable: l
            }), c.zg.wv = 1);
            this.Ha(c.zg);
            c.zg.Xb(a)
        }
    };
    wa[u].Eb = function() {
        var a = this.B.za || this.B.Ef;
        a && a.ya && a.ya.Eb()
    };
    Ma[u].Xb = function(a) {
        this.map && (this.map.Eb(), a.bb = f, this.map.B.Ef = a, a.ya = this, C.lang.oa.call(a, a.K))
    };
    Ma[u].Eb = function() {
        this.map && this.map.B.Ef && (this.map.B.Ef.bb = l, C.lang.Ok(this.map.B.Ef.K), this.map.B.Ef = k)
    };
    function Kb(a, b) {
        Ma.call(this);
        this.content = a;
        this.F = this.map = k;
        b = b || {};
        this.v = {
            width: 0,
            Y: b.offset || new P(0, 0),
            Kh: {
                backgroundColor: "#fff",
                border: "1px solid #f00",
                padding: "1px",
                whiteSpace: "nowrap",
                font: "12px " + J.fontFamily,
                zIndex: "80",
                MozUserSelect: "none"
            },
            position: b.position || k,
            kf: b.enableMassClear === l ? l: f,
            Jc: f
        };
        0 > this.v[y] && (this.v[y] = 0);
        eb(b.enableClicking) && (this.v.Jc = b.enableClicking);
        this.N = this.v[la];
        var c = this;
        L.load("marker", 
        function() {
            c.Ob()
        })
    }
    C.lang.fa(Kb, Ma, "Label");
    C[x](Kb[u], {
        V: function() {
            return this.fk ? this.fk.V() : this.N
        },
        ca: function(a) {
            a instanceof K && !this.al() && (this.N = this.v[la] = new K(a.lng, a.lat))
        },
        ac: ba("content"),
        GA: function(a) {
            0 <= a && 1 >= a && (this.v.opacity = a)
        },
        nc: function(a) {
            a instanceof P && (this.v.Y = new P(a[y], a[A]))
        },
        Me: function() {
            return this.v.Y
        },
        Jb: function(a) {
            a = a || {};
            this.v.Kh = C[x](this.v.Kh, a)
        },
        uf: function(a) {
            return this.Jb(a)
        },
        xb: function(a) {
            this.v.title = a || ""
        },
        getTitle: function() {
            return this.v.title
        },
        Qt: function(a) {
            this.N = (this.fk = a) ? this.v[la] = a.V() : this.v[la] = k
        },
        al: function() {
            return this.fk || k
        }
    });
    var Lb = new Ib(J.Z + "marker_red_sprite.png", new P(19, 25), {
        anchor: new P(10, 25),
        infoWindowAnchor: new P(10, 0)
    }),
    Mb = new Ib(J.Z + "marker_red_sprite.png", new P(20, 11), {
        anchor: new P(6, 11),
        imageOffset: new P( - 19, -13)
    });
    function U(a, b) {
        Ma.call(this);
        b = b || {};
        this.N = a;
        this.Th = this.map = k;
        this.v = {
            Y: b.offset || new P(0, 0),
            Jd: b.icon || Lb,
            vf: Mb,
            title: b.title || "",
            label: k,
            Gr: b.baseZIndex || 0,
            Jc: f,
            ZC: l,
            So: l,
            kf: b.enableMassClear === l ? l: f,
            nb: l,
            It: b.raiseOnDrag === f ? f: l,
            Lt: l,
            Bc: b.draggingCursor || J.Bc
        };
        b.icon && !b.shadow && (this.v.vf = k);
        b.enableDragging && (this.v.nb = b.enableDragging);
        eb(b.enableClicking) && (this.v.Jc = b.enableClicking);
        var c = this;
        L.load("marker", 
        function() {
            c.Ob()
        })
    }
    U.Ij = Db.Vi( - 90) + 1E6;
    U.Mp = U.Ij + 1E6;
    C.lang.fa(U, Ma, "Marker");
    C[x](U[u], {
        se: function(a) {
            a instanceof Ib && (this.v.Jd = a)
        },
        xs: function() {
            return this.v.Jd
        },
        Hl: function(a) {
            a instanceof Ib && (this.v.vf = a)
        },
        getShadow: function() {
            return this.v.vf
        },
        Hg: function(a) {
            this.v.label = a || k
        },
        ys: function() {
            return this.v.label
        },
        nb: function() {
            this.v.nb = f
        },
        Sn: function() {
            this.v.nb = l
        },
        V: o("N"),
        ca: function(a) {
            a instanceof K && (this.N = new K(a.lng, a.lat))
        },
        Hh: function(a, b) {
            this.v.So = !!a;
            a && (this.Xp = b || 0)
        },
        xb: function(a) {
            this.v.title = a + ""
        },
        getTitle: function() {
            return this.v.title
        },
        nc: function(a) {
            a instanceof P && (this.v.Y = a)
        },
        Me: function() {
            return this.v.Y
        },
        Gg: ba("Th")
    });
    function Nb(a, b) {
        Fb.call(this, b);
        b = b || {};
        this.v.ig = b.fillOpacity ? b.fillOpacity: 0.65;
        this.v.fillColor = "" == b.fillColor ? "": b.fillColor ? b.fillColor: "#fff";
        this.oc(a);
        var c = this;
        L.load("poly", 
        function() {
            c.Ob()
        })
    }
    C.lang.fa(Nb, Fb, "Polygon");
    C[x](Nb[u], {
        oc: function(a, b) {
            this.gh = Fb.Yk(a).slice(0);
            var c = Fb.Yk(a).slice(0);
            1 < c[w] && c.push(new K(c[0].lng, c[0].lat));
            Fb[u].oc.call(this, c, b)
        },
        Jg: function(a, b) {
            this.gh[a] && (this.gh[a] = new K(b.lng, b.lat), this.R[a] = new K(b.lng, b.lat), 0 == a && !this.R[0].Rb(this.R[this.R[w] - 1]) && (this.R[this.R[w] - 1] = new K(b.lng, b.lat)), this.Td())
        },
        gc: function() {
            var a = this.gh;
            0 == a[w] && (a = this.R);
            return a
        }
    });
    function Ob(a, b) {
        Fb.call(this, b);
        this.ti(a);
        var c = this;
        L.load("poly", 
        function() {
            c.Ob()
        })
    }
    C.lang.fa(Ob, Fb, "Polyline");
    function Pb(a, b, c) {
        this.N = a;
        this.ua = p.abs(b);
        Nb.call(this, [], c)
    }
    Pb.bp = [0.01, 1.0E-4, 1.0E-5, 4.0E-6];
    C.lang.fa(Pb, Nb, "Circle");
    C[x](Pb[u], {
        initialize: function(a) {
            this.map = a;
            this.R = this.Wj(this.N, this.ua);
            this.Td();
            return k
        },
        Ia: o("N"),
        rd: function(a) {
            a && (this.N = a)
        },
        $y: o("ua"),
        Gl: function(a) {
            this.ua = p.abs(a)
        },
        Wj: function(a, b) {
            if (!a || !b || !this.map) return [];
            for (var c = [], d = b / 6378800, e = p.PI / 180 * a.lat, g = p.PI / 180 * a.lng, i = 0; 360 > i; i += 9) {
                var j = p.PI / 180 * i,
                n = p.asin(p.sin(e) * p.cos(d) + p.cos(e) * p.sin(d) * p.cos(j)),
                j = new K(((g - p.atan2(p.sin(j) * p.sin(d) * p.cos(e), p.cos(d) - p.sin(e) * p.sin(n)) + p.PI) % (2 * p.PI) - p.PI) * (180 / p.PI), n * (180 / p.PI));
                c.push(j)
            }
            d = c[0];
            c.push(new K(d.lng, d.lat));
            return c
        }
    });
    var Qb = {};
    function Rb(a) {
        this.map = a;
        this.yh = [];
        this.ed = [];
        this.Mx = 300;
        this.ep = 0;
        this.Md = {};
        this.$f = {};
        this.ej = 0;
        this.Xg = this.kq(1);
        this.ni = this.kq(2);
        a.platform[v](this.Xg);
        a.platform[v](this.ni)
    }
    H.Ec(function(a) { (new Rb(a)).ta()
    });
    C[x](Rb[u], {
        ta: function() {
            var a = this,
            b = a.map;
            b[B]("loadcode", 
            function() {
                a.ml()
            });
            b[B]("addtilelayer", 
            function(b) {
                a.zi(b)
            });
            b[B]("removetilelayer", 
            function(b) {
                a.gj(b)
            });
            b[B]("setmaptype", 
            function(b) {
                a.Te(b)
            });
            b[B]("zoomstartcode", 
            function(b) {
                a.sr(b)
            })
        },
        ml: function() {
            var a = this;
            if (C.O.T) try {
                da.execCommand("BackgroundImageCache", l, f)
            } catch(b) {}
            this.loaded || a.gl();
            a.ne();
            this.loaded || (this.loaded = f, L.load("tile", 
            function() {
                a.Mu()
            }))
        },
        gl: function() {
            for (var a = this.map.ba().mi, b = 0; b < a[w]; b++) {
                var c = new Sb;
                C[x](c, a[b]);
                this.yh.push(c);
                c.ta(this.map, this.Xg)
            }
        },
        kq: function(a) {
            var b = M("div");
            b.style[la] = "absolute";
            b.style.overflow = "visible";
            b.style.left = b.style.top = "0";
            b.style.zIndex = a;
            return b
        },
        PA: function(a, b, c) {
            var d = this;
            d.WB = b;
            var e = this.map.ba(),
            g = d.Es(a, c),
            i = e.u.Ve,
            j = a[0] * i + b[0],
            n = 0;
            e === ya && 15 == d.map.ha() && (n = 0.5);
            b = [j, (n - 1 - a[1]) * i + b[1]]; (i = this.Md[g]) && i.Ja ? (Va(i.Ja, b), i.loaded ? this.Xh() : i.Zl(function() {
                d.Xh()
            })) : (i = this.$f[g]) && i.Ja ? (c.lb.insertBefore(i.Ja, c.lb.lastChild), this.Md[g] = i, Va(i.Ja, b), i.loaded ? this.Xh() : i.Zl(function() {
                d.Xh()
            })) : (e = 256 * p.pow(2, e.og() - a[2]), new K(a[0] * e, a[1] * e), e = c.getTilesUrl(new S(a[0], a[1]), a[2]), i = new Tb(this, e, b, a, c), i.Zl(function() {
                d.Xh()
            }), i.jw(), this.Md[g] = i)
        },
        Xh: function() {
            this.ej--;
            var a = this;
            0 == this.ej && (this.Nj && (clearTimeout(this.Nj), this.Nj = k), this.Nj = setTimeout(function() {
                if (a.ej == 0) {
                    a.map.dispatchEvent(new Q("ontilesloaded"));
                    if (va) {
                        if (sa && ta && ua) {
                            var b = Ia(),
                            c = a.map.Sb();
                            setTimeout(function() {
                                za(5030, {
                                    load_script_time: ta - sa,
                                    load_tiles_time: b - ua,
                                    map_width: c[y],
                                    map_height: c[A],
                                    map_size: c[y] * c[A]
                                })
                            },
                            1E4)
                        }
                        va = l
                    }
                }
                a.Nj = k
            },
            80))
        },
        Es: function(a, b) {
            return this.map.ba() === ya ? "TILE-" + b.K + "-" + this.map.Dn + "-" + a[0] + "-" + a[1] + "-" + a[2] : "TILE-" + b.K + "-" + a[0] + "-" + a[1] + "-" + a[2]
        },
        Ko: function(a) {
            var b = a.Ja;
            if (b && (Ub(b), Xa(b))) b[ka][ga](b);
            delete this.Md[a.name];
            a.loaded || (Ub(b), a.dm(), a.Ja = k, a.zh = k)
        },
        ne: function() {
            var a = this;
            a.map.ba() == ya ? L.load("coordtrans", 
            function() {
                a.Mq()
            },
            f) : a.Mq()
        },
        Mq: function() {
            for (var a = this.yh.concat(this.ed), b = a[w], c = 0; c < b; c++) {
                var d = a[c];
                if (d.Hb && e.va < d.Hb) break;
                d.Ck && (this.lb = d.lb);
                var e = this.map,
                g = e.ba(),
                i = g.qg(),
                j = e.va,
                n = e.Gb;
                g == ya && n.Rb(new K(0, 0)) && (n = e.Gb = i.yg(e.Cd, e.ib));
                var q = g.ob(j),
                j = g.uz(j),
                i = p.ceil(n.lng / j),
                s = p.ceil(n.lat / j),
                z = g.u.Ve,
                j = [i, s, (n.lng - i * j) / j * z, (n.lat - s * j) / j * z],
                E = j[0] - p.ceil((e[y] / 2 - j[2]) / z),
                i = j[1] - p.ceil((e[A] / 2 - j[3]) / z),
                s = j[0] + p.ceil((e[y] / 2 + j[2]) / z),
                F = 0;
                g === ya && 15 == e.ha() && (F = 1);
                g = j[1] + p.ceil((e[A] / 2 + j[3]) / z) + F;
                this.Er = new K(n.lng, n.lat);
                var F = this.Md,
                z = -this.Er.lng / q,
                I = this.Er.lat / q,
                q = [p.ceil(z), p.ceil(I)],
                n = e.ha(),
                G;
                for (G in F) {
                    var ha = F[G],
                    D = ha.info; (D[2] != n || D[2] == n && (E > D[0] || s <= D[0] || i > D[1] || g <= D[1])) && this.Ko(ha)
                }
                F = -e[ja] + e[A] / 2;
                d.lb.style.left = p.ceil(z + ( - e[ia] + e[y] / 2)) - q[0] + "px";
                d.lb.style.top = p.ceil(I + F) - q[1] + "px";
                z = [];
                for (e.tn = []; E < s; E++) for (F = i; F < g; F++) z.push([E, F]),
                e.tn.push({
                    x: E,
                    y: F
                });
                z.sort(function(a) {
                    return function(b, c) {
                        return 0.4 * p.abs(b[0] - a[0]) + 0.6 * p.abs(b[1] - a[1]) - (0.4 * p.abs(c[0] - a[0]) + 0.6 * p.abs(c[1] - a[1]))
                    }
                } ([j[0] - 1, j[1] - 1]));
                this.ej += z[w];
                E = 0;
                for (j = z[w]; E < j; E++) this.PA([z[E][0], z[E][1], n], q, d)
            }
        },
        zi: function(a) {
            for (var a = a.target, b = 0; b < this.ed[w]; b++) if (this.ed[b] == a) return;
            a.ta(this.map, this.ni);
            this.ed.push(a)
        },
        gj: function(a) {
            for (var a = a.target, b = 0, c = this.ed[w]; b < c; b++) a == this.ed[b] && this.ed.splice(b, 1);
            a.remove()
        },
        Te: function() {
            for (var a = this.yh, b = 0, c = a[w]; b < c; b++) a[b].remove();
            delete this.lb;
            this.yh = [];
            this.$f = this.Md = {};
            this.gl();
            this.ne()
        },
        sr: function() {
            var a = this;
            a.Ab && C.w.G(a.Ab);
            setTimeout(function() {
                a.ne();
                a.map.dispatchEvent(new Q("onzoomend"))
            },
            10)
        }
    });
    function Tb(a, b, c, d, e) {
        this.zh = a;
        this[la] = c;
        this.Lj = [];
        this.name = a.Es(d, e);
        this.info = d;
        this.or = e.il();
        d = M("img");
        Wa(d);
        d.ns = l;
        var g = d.style,
        a = a.map.ba();
        g[la] = "absolute";
        g.border = "none";
        g[y] = a.u.Ve + "px";
        g[A] = a.u.Ve + "px";
        g.left = c[0] + "px";
        g.top = c[1] + "px";
        g.maxWidth = "none";
        this.Ja = d;
        this.src = b;
        Vb && (this.Ja.style.opacity = 0);
        var i = this;
        this.Ja.onload = function() {
            i.loaded = f;
            if (i.zh) {
                var a = i.zh,
                b = a.$f;
                if (!b[i.name]) {
                    a.ep++;
                    b[i.name] = i
                }
                if (i.Ja && !Xa(i.Ja) && e.lb) {
                    e.lb[v](i.Ja);
                    if (C.O.T <= 6 && C.O.T > 0 && i.or) i.Ja.style.cssText = i.Ja.style.cssText + (';filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + i.src + '",sizingMethod=scale);')
                }
                var c = a.ep - a.Mx,
                d;
                for (d in b) {
                    if (c <= 0) break;
                    if (!a.Md[d]) {
                        b[d].zh = k;
                        var g = b[d].Ja;
                        if (g && g[ka]) {
                            g[ka][ga](g);
                            Ub(g)
                        }
                        g = k;
                        b[d].Ja = k;
                        delete b[d];
                        a.ep--;
                        c--
                    }
                }
                Vb && new Ta({
                    Nc: 20,
                    duration: 200,
                    Sa: function(a) {
                        if (i.Ja && i.Ja.style) i.Ja.style.opacity = a * 1
                    },
                    finish: function() {
                        i.Ja && i.Ja.style && delete i.Ja.style.opacity
                    }
                });
                i.dm()
            }
        };
        this.Ja.onerror = function() {
            i.dm();
            if (i.zh) {
                var a = i.zh.map.ba();
                if (a.u.ho) {
                    i.error = f;
                    i.Ja.src = a.u.ho;
                    if (i.Ja && !Xa(i.Ja)) e.lb[v](i.Ja)
                }
            }
        };
        d = k
    }
    Tb[u].Zl = function(a) {
        this.Lj.push(a)
    };
    Tb[u].jw = function() {
        this.Ja.src = 0 < C.O.T && 6 >= C.O.T && this.or ? J.Z + "blank.gif": this.src
    };
    Tb[u].dm = function() {
        for (var a = 0; a < this.Lj[w]; a++) this.Lj[a]();
        this.Lj[w] = 0
    };
    function Ub(a) {
        if (a) {
            a.onload = a.onerror = k;
            var b = a.attributes,
            c,
            d,
            e;
            if (b) {
                d = b[w];
                for (c = 0; c < d; c += 1) e = b[c].name,
                Ga(a[e]) && (a[e] = k)
            }
            if (b = a.children) {
                d = b[w];
                for (c = 0; c < d; c += 1) Ub(a.children[c])
            }
        }
    }
    var Vb = !C.O.T || 8 < C.O.T;
    function Sb(a) {
        this.Bh = a || {};
        this.ay = this.Bh.copyright || k;
        this.kB = this.Bh.transparentPng || l;
        this.Ck = this.Bh.baseLayer || l;
        this.zIndex = this.Bh.zIndex || 0;
        this.K = Sb.$v++
    }
    Sb.$v = 0;
    C.lang.fa(Sb, C.lang.oa, "TileLayer");
    C[x](Sb[u], {
        ta: function(a, b) {
            this.Ck && (this.zIndex = -100);
            this.map = a;
            if (!this.lb) {
                var c = M("div"),
                d = c.style;
                d[la] = "absolute";
                d.overflow = "visible";
                d.zIndex = this.zIndex;
                d.left = p.ceil( - a[ia] + a[y] / 2) + "px";
                d.top = p.ceil( - a[ja] + a[A] / 2) + "px";
                b[v](c);
                this.lb = c
            }
            c = a.ba();
            a.ie() && c == xa && (c.u.Ve = 128, d = function(a) {
                return p.pow(2, 18 - a) * 2
            },
            c.ob = d, c.u.lc.ob = d)
        },
        remove: function() {
            this.lb && this.lb[ka] && (this.lb.innerHTML = "", this.lb[ka][ga](this.lb));
            delete this.lb
        },
        il: o("kB"),
        getTilesUrl: function(a, b) {
            var c = "";
            this.Bh.tileUrlTemplate && (c = this.Bh.tileUrlTemplate.replace(/\{X\}/, a.x), c = c.replace(/\{Y\}/, a.y), c = c.replace(/\{Z\}/, b));
            return c
        },
        lg: o("ay"),
        ba: function() {
            return this.eb || xa
        }
    });
    function Wb(a) {
        Sb.call(this, a);
        this.u = a || {};
        if (this.u.predictDate) {
            if (1 > this.u.predictDate.weekday || 7 < this.u.predictDate.weekday) this.u.predictDate = 1;
            if (0 > this.u.predictDate.hour || 23 < this.u.predictDate.hour) this.u.predictDate.hour = 0
        }
        this.px = "http://its.map.baidu.com:8002/traffic/"
    }
    Wb[u] = new Sb;
    Wb[u].ta = function(a, b) {
        Sb[u].ta.call(this, a, b);
        this.z = a
    };
    Wb[u].il = ca(f);
    Wb[u].getTilesUrl = function(a, b) {
        var c = "";
        this.u.predictDate ? c = "HistoryService?day=" + (this.u.predictDate.weekday - 1) + "&hour=" + this.u.predictDate.hour + "&t=" + (new Date).getTime() + "&": (c = "TrafficTileService?time=" + (new Date).getTime() + "&", this.z.ie() || (c += "label=web2D&v=016&"));
        return (this.px + c + "level=" + b + "&x=" + a.x + "&y=" + a.y).replace(/-(\d+)/gi, "M$1")
    };
    
    //用户自定义图层
    function Xb(a, b) {
        Sb.call(this);
        var c = this;
        fb(a) ? b = a || {}: (c.$h = a, b = b || {});
        b.geotableId && (c.Tj = b.geotableId);
        b.databoxId && (c.$h = b.databoxId);
        c.$c = {
            Cz: "http://api.map.baidu.com/georender/gss/image",
            Nt: "api.map.baidu.com/geosearch/render",
            Az: "http://api.map.baidu.com/georender/gss/data",
            Bz: "http://api.map.baidu.com/geosearch/detail/",
            Cr: b.age || 36E5,
            Ea: b.keyword || "",
            cB: "png",
            oC: [5, 5, 5, 5],
            Sz: {
                backgroundColor: "#FFFFD5",
                borderColor: "#808080"
            }
        };
        L.load("clayer", 
        function() {
            c.Nb()
        })
    }
    Xb[u] = new Sb;
    Xb[u].ta = function(a, b) {
        Sb[u].ta.call(this, a, b);
        this.z = a
    };
    Xb[u].getTilesUrl = function(a, b) {
        var c = this.$c,
        c = c.Cz + "?grids=" + a.x + "_" + a.y + "_" + b + "&q=" + c.Ea + "&rwfs=" + c.Nt + "&ak=" + ra + "&age=" + c.Cr + "&format=" + c.cB;
        this.Tj ? c += "&geotable_id=" + this.Tj: this.$h && (c += "&databox_id=" + this.$h);
        return c
    };
    Xb.Uw = /^point\(|\)$/ig;
    Xb.Vw = /\s+/;
    Xb.Xw = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
    
    
    
    //地图类型对象
    function Yb(a, b, c) {
        this.sw = a;
        this.mi = b instanceof Sb ? [b] : b.slice(0);
        c = c || {};
        this.u = {
            dB: c.tips || "",
            Uo: "",
            Hb: c.minZoom || 3,
            hc: c.maxZoom || 19,
            yz: c.minZoom || 3,
            xz: c.maxZoom || 18,
            Ve: 256,
            bB: c.textColor || "black",
            ho: c.errorImageUrl || "",
            lc: c.projection || new T
        };
        1 <= this.mi[w] && (this.mi[0].Ck = f);
        C[x](this.u, c)
    }
    C[x](Yb[u], {
        getName: o("sw"),
        Ui: function() {
            return this.u.dB
        },
        gC: function() {
            return this.u.Uo
        },
        mz: function() {
            return this.mi[0]
        },
        mC: o("mi"),
        nz: function() {
            return this.u.Ve
        },
        ph: function() {
            return this.u.Hb
        },
        og: function() {
            return this.u.hc
        },
        Ti: function() {
            return this.u.bB
        },
        qg: function() {
            return this.u.lc
        },
        fC: function() {
            return this.u.ho
        },
        nz: function() {
            return this.u.Ve
        },
        ob: function(a) {
            return p.pow(2, 18 - a)
        },
        uz: function(a) {
            return this.ob(a) * this.u.Ve
        }
    });
    var Zb = ["http://shangetu0.map.bdimg.com/it/", "http://shangetu1.map.bdimg.com/it/", "http://shangetu2.map.bdimg.com/it/", "http://shangetu3.map.bdimg.com/it/", "http://shangetu4.map.bdimg.com/it/"],
    $b = ["http://online0.map.bdimg.com/tile/", "http://online1.map.bdimg.com/tile/", "http://online2.map.bdimg.com/tile/", "http://online3.map.bdimg.com/tile/", "http://online4.map.bdimg.com/tile/"],
    ac = new Sb;
    ac.getTilesUrl = function(a, b) {
        var c = a.x,
        d = a.y,
        e = "pl";
        this.map.ie() && (e = "ph");
        return ($b[p.abs(c + d) % $b[w]] + "?qt=tile&x=" + (c + "").replace(/-/gi, "M") + "&y=" + (d + "").replace(/-/gi, "M") + "&z=" + b + "&styles=" + e + (6 == C.O.T ? "&color_dep=32&colors=50": "") + "&udt=20130712").replace(/-(\d+)/gi, "M$1")
    };
    var xa = new Yb("\u5730\u56fe", ac, {
        tips: "\u663e\u793a\u666e\u901a\u5730\u56fe"
    }),
    bc = new Sb;
    bc.cu = ["http://d0.map.baidu.com/resource/mappic/", "http://d1.map.baidu.com/resource/mappic/", "http://d2.map.baidu.com/resource/mappic/", "http://d3.map.baidu.com/resource/mappic/"];
    bc.getTilesUrl = function(a, b) {
        var c = a.x,
        d = a.y,
        e = 256 * p.pow(2, 20 - b),
        d = p.round((9998336 - e * d) / e) - 1;
        return url = this.cu[p.abs(c + d) % this.cu[w]] + this.map.ib + "/" + this.map.Dn + "/3/lv" + (21 - b) + "/" + c + "," + d + ".jpg"
    };
    var ya = new Yb("\u4e09\u7ef4", bc, {
        tips: "\u663e\u793a\u4e09\u7ef4\u5730\u56fe",
        minZoom: 15,
        maxZoom: 20,
        textColor: "white",
        projection: new Na
    });
    ya.ob = function(a) {
        return p.pow(2, 20 - a)
    };
    ya.mh = function(a) {
        if (!a) return "";
        var b = J.Gn,
        c;
        for (c in b) if ( - 1 < a.search(c)) return b[c].wl;
        return ""
    };
    ya.Ly = function(a) {
        return {
            bj: 2,
            gz: 1,
            sz: 14,
            sh: 4
        } [a]
    };
    var cc = new Sb({
        Ck: f
    });
    cc.getTilesUrl = function(a, b) {
        var c = a.x,
        d = a.y;
        return (Zb[p.abs(c + d) % Zb[w]] + "u=x=" + c + ";y=" + d + ";z=" + b + ";v=009;type=sate&fm=46").replace(/-(\d+)/gi, "M$1")
    };
    var Aa = new Yb("\u536b\u661f", cc, {
        tips: "\u663e\u793a\u536b\u661f\u5f71\u50cf",
        minZoom: 1,
        maxZoom: 19,
        textColor: "white"
    }),
    dc = new Sb({
        transparentPng: f
    });
    dc.getTilesUrl = function(a, b) {
        var c = a.x,
        d = a.y;
        return ($b[p.abs(c + d) % $b[w]] + "?qt=tile&x=" + (c + "").replace(/-/gi, "M") + "&y=" + (d + "").replace(/-/gi, "M") + "&z=" + b + "&styles=sl" + (6 == C.O.T ? "&color_dep=32&colors=50": "") + "&udt=20130712").replace(/-(\d+)/gi, "M$1")
    };
    var Ba = new Yb("\u6df7\u5408", [cc, dc], {
        tips: "\u663e\u793a\u5e26\u6709\u8857\u9053\u7684\u536b\u661f\u5f71\u50cf",
        labelText: "\u8def\u7f51",
        minZoom: 1,
        maxZoom: 19,
        textColor: "white"
    });
    var ec = 1,
    V = {};
    window.vB = V;
    function W(a, b) {
        C.lang.oa.call(this);
        this.Cb = {};
        this.Ig(a);
        b = b || {};
        b.S = b.renderOptions || {};
        this.u = {
            S: {
                ma: b.S.panel || k,
                map: b.S.map || k,
                Bd: b.S.autoViewport || f,
                hj: b.S.selectFirstResult,
                Xi: b.S.highlightMode,
                nb: b.S.enableDragging || l
            },
            ul: b.onSearchComplete || m(),
            zt: b.onMarkersSet || m(),
            yt: b.onInfoHtmlSet || m(),
            At: b.onResultsHtmlSet || m(),
            xt: b.onGetBusListComplete || m(),
            wt: b.onGetBusLineComplete || m(),
            vt: b.onBusListHtmlSet || m(),
            ut: b.onBusLineHtmlSet || m(),
            Zo: b.onPolylinesSet || m(),
            Eh: b.reqFrom || ""
        };
        this.u.S.Bd = "undefined" != typeof b && "undefined" != typeof b.renderOptions && "undefined" != typeof b.renderOptions.autoViewport ? b.renderOptions.autoViewport: f;
        this.u.S.ma = C.Lb(this.u.S.ma)
    }
    C.fa(W, C.lang.oa);
    C[x](W[u], {
        getResults: function() {
            return this.hb ? this.ye: this.M
        },
        enableAutoViewport: function() {
            this.u.S.Bd = f
        },
        disableAutoViewport: function() {
            this.u.S.Bd = l
        },
        Ig: function(a) {
            a && (this.Cb.src = a)
        },
        qp: function(a) {
            this.u.ul = a || m()
        },
        setMarkersSetCallback: function(a) {
            this.u.zt = a || m()
        },
        setPolylinesSetCallback: function(a) {
            this.u.Zo = a || m()
        },
        setInfoHtmlSetCallback: function(a) {
            this.u.yt = a || m()
        },
        setResultsHtmlSetCallback: function(a) {
            this.u.At = a || m()
        },
        rg: o("Pb")
    });
    var fc = {
        Bu: "http://api.map.baidu.com/",
        Ca: function(a, b, c, d, e) {
            var g = (1E5 * p.random()).toFixed(0);
            H._rd["_cbk" + g] = function(b) {
                c = c || {};
                a && a(b, c);
                delete H._rd["_cbk" + g]
            };
            d = d || "";
            b = c && c.lu ? db(b, encodeURI) : db(b, encodeURIComponent);
            d = this.Bu + d + "?" + b + "&ie=utf-8&oue=1&fromproduct=jsapi";
            e || (d += "&res=api");
            lb(d + ("&callback=BMap._rd._cbk" + g))
        }
    };
    window.zB = fc;
    H._rd = {};
    var R = {};
    window.yB = R;
    R.Jt = function(a) {
        return a.replace(/<\/?b>/g, "")
    };
    R.gA = function(a) {
        return a.replace(/([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0|[1-9]\d*),([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0|[1-9]\d*)(,)/g, "$1,$2;")
    };
    R.hA = function(a, b) {
        var c = new ea("(((-?\\d+)(\\.\\d+)?),((-?\\d+)(\\.\\d+)?);)(((-?\\d+)(\\.\\d+)?),((-?\\d+)(\\.\\d+)?);){" + b + "}", "ig");
        return a.replace(c, "$1")
    };
    var gc = 2,
    hc = 3,
    ic = 0,
    jc = "bt",
    kc = "nav",
    lc = "walk",
    mc = "bl",
    nc = "bsl",
    oc = 14,
    pc = 15,
    qc = 18,
    rc = 20,
    sc = 31;
    H.I = window.Instance = C.lang.Kd;
    function Ja(a, b) {
        W.call(this, a, b);
        b = b || {};
        b.renderOptions = b.renderOptions || {};
        this.Gh(b.pageCapacity);
        "undefined" != typeof b.renderOptions.selectFirstResult && !b.renderOptions.selectFirstResult ? this.Tn() : this.ao();
        this.X = [];
        this.Vc = [];
        this.wa = -1;
        this.ea = [];
        var c = this;
        L.load("local", 
        function() {
            c.fm()
        },
        f)
    }
    C.fa(Ja, W, "LocalSearch");
    Ja.Qh = 10;
    Ja.wB = 1;
    Ja.Pg = 100;
    Ja.Lp = 2E3;
    Ja.Pp = 1E5;
    C[x](Ja[u], {
        search: function(a, b) {
            this.ea.push({
                method: "search",
                arguments: [a, b]
            })
        },
        Eg: function(a, b, c) {
            this.ea.push({
                method: "searchInBounds",
                arguments: [a, b, c]
            })
        },
        Fh: function(a, b, c, d) {
            this.ea.push({
                method: "searchNearby",
                arguments: [a, b, c, d]
            })
        },
        Ac: function() {
            delete this.da;
            delete this.Pb;
            delete this.M;
            delete this.Q;
            this.wa = -1;
            this.Ba();
            this.u.S.ma && (this.u.S.ma.innerHTML = "")
        },
        tg: m(),
        ao: function() {
            this.u.S.hj = f
        },
        Tn: function() {
            this.u.S.hj = l
        },
        Gh: function(a) {
            this.u.rf = "number" == typeof a && !isNaN(a) ? 1 > a ? Ja.Qh: a > Ja.Pg ? Ja.Qh: a: Ja.Qh
        },
        Pc: function() {
            return this.u.rf
        },
        toString: ca("LocalSearch")
    });
    var tc = Ja[u];
    Z(tc, {
        clearResults: tc.Ac,
        setPageCapacity: tc.Gh,
        getPageCapacity: tc.Pc,
        gotoPage: tc.tg,
        searchNearby: tc.Fh,
        searchInBounds: tc.Eg,
        search: tc.search,
        enableFirstResultSelection: tc.ao,
        disableFirstResultSelection: tc.Tn
    });
    function uc(a, b) {
        W.call(this, a, b)
    }
    C.fa(uc, W, "BaseRoute");
    C[x](uc[u], {
        Ac: m()
    });
    function vc(a, b) {
        W.call(this, a, b);
        b = b || {};
        this.lj(b.policy);
        this.Gh(b.pageCapacity);
        this.ve = jc;
        this.Hj = oc;
        this.Xl = ec;
        this.X = [];
        this.wa = -1;
        this.ea = [];
        var c = this;
        L.load("route", 
        function() {
            c.Nb()
        })
    }
    vc.Pg = 100;
    vc.wu = [0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 1];
    C.fa(vc, uc, "TransitRoute");
    C[x](vc[u], {
        lj: function(a) {
            this.u.kc = 0 <= a && 4 >= a ? a: 0
        },
        fw: function(a, b) {
            this.ea.push({
                method: "_internalSearch",
                arguments: [a, b]
            })
        },
        search: function(a, b) {
            this.ea.push({
                method: "search",
                arguments: [a, b]
            })
        },
        Gh: function(a) {
            if ("string" == typeof a && (a = t(a), isNaN(a))) {
                this.u.rf = vc.Pg;
                return
            }
            this.u.rf = "number" != typeof a ? vc.Pg: 1 <= a && a <= vc.Pg ? p.round(a) : vc.Pg
        },
        toString: ca("TransitRoute"),
        fx: function(a) {
            return a.replace(/\(.*\)/, "")
        }
    });
    function wc(a, b) {
        W.call(this, a, b);
        this.X = [];
        this.wa = -1;
        this.ea = [];
        var c = this,
        d = this.u.S;
        1 != d.Xi && 2 != d.Xi && (d.Xi = 1);
        this.qm = this.u.S.nb ? f: l;
        L.load("route", 
        function() {
            c.Nb()
        });
        this.Mo && this.Mo()
    }
    wc.Eu = " \u73af\u5c9b \u65e0\u5c5e\u6027\u9053\u8def \u4e3b\u8def \u9ad8\u901f\u8fde\u63a5\u8def \u4ea4\u53c9\u70b9\u5185\u8def\u6bb5 \u8fde\u63a5\u9053\u8def \u505c\u8f66\u573a\u5185\u90e8\u9053\u8def \u670d\u52a1\u533a\u5185\u90e8\u9053\u8def \u6865 \u6b65\u884c\u8857 \u8f85\u8def \u531d\u9053 \u5168\u5c01\u95ed\u9053\u8def \u672a\u5b9a\u4e49\u4ea4\u901a\u533a\u57df POI\u8fde\u63a5\u8def \u96a7\u9053 \u6b65\u884c\u9053 \u516c\u4ea4\u4e13\u7528\u9053 \u63d0\u524d\u53f3\u8f6c\u9053".split(" ");
    C.fa(wc, uc, "DWRoute");
    C[x](wc[u], {
        search: function(a, b, c) {
            this.ea.push({
                method: "search",
                arguments: [a, b, c]
            })
        }
    });
    function xc(a, b) {
        wc.call(this, a, b);
        b = b || {};
        this.lj(b.policy);
        this.ve = kc;
        this.Hj = rc;
        this.Xl = hc
    }
    C.fa(xc, wc, "DrivingRoute");
    C[x](xc[u], {
        lj: function(a) {
            this.u.kc = 0 <= a && 2 >= a ? a: 0
        }
    });
    function yc(a, b) {
        wc.call(this, a, b);
        this.ve = lc;
        this.Hj = sc;
        this.Xl = gc;
        this.qm = l
    }
    C.fa(yc, wc, "WalkingRoute");
    function zc(a) {
        this.u = {};
        C[x](this.u, a);
        this.ea = [];
        var b = this;
        L.load("othersearch", 
        function() {
            b.Nb()
        })
    }
    C.fa(zc, C.lang.oa, "Geocoder");
    C[x](zc[u], {
        Co: function(a, b, c) {
            this.ea.push({
                method: "getPoint",
                arguments: [a, b, c]
            })
        },
        $k: function(a, b, c) {
            this.ea.push({
                method: "getLocation",
                arguments: [a, b, c]
            })
        },
        toString: ca("Geocoder")
    });
    var Ac = zc[u];
    Z(Ac, {
        getPoint: Ac.Co,
        getLocation: Ac.$k
    });
    function Geolocation(a) {
        this.u = {};
        C[x](this.u, a);
        this.ea = [];
        var b = this;
        L.load("othersearch", 
        function() {
            b.Nb()
        })
    }
    C[x](Geolocation[u], {
        getCurrentPosition: function(a, b) {
            this.ea.push({
                method: "getCurrentPosition",
                arguments: [a, b]
            })
        },
        rg: o("Pb")
    });
    var Bc = Geolocation[u];
    Z(Bc, {
        getCurrentPosition: Bc.getCurrentPosition,
        getStatus: Bc.rg
    });
    function Cc(a) {
        a = a || {};
        a.S = a.renderOptions || {};
        this.u = {
            S: {
                map: a.S.map || k
            }
        };
        this.ea = [];
        var b = this;
        L.load("othersearch", 
        function() {
            b.Nb()
        })
    }
    C.fa(Cc, C.lang.oa, "LocalCity");
    C[x](Cc[u], {
        get: function(a) {
            this.ea.push({
                method: "get",
                arguments: [a]
            })
        },
        toString: ca("LocalCity")
    });
    function Dc() {
        this.ea = [];
        var a = this;
        L.load("othersearch", 
        function() {
            a.Nb()
        })
    }
    C.fa(Dc, C.lang.oa, "Boundary");
    C[x](Dc[u], {
        get: function(a, b) {
            this.ea.push({
                method: "get",
                arguments: [a, b]
            })
        },
        toString: ca("Boundary")
    });
    function Ec(a, b) {
        W.call(this, a, b);
        this.Au = mc;
        this.Du = pc;
        this.zu = nc;
        this.Cu = qc;
        this.ea = [];
        var c = this;
        L.load("buslinesearch", 
        function() {
            c.Nb()
        })
    }
    Ec.$j = J.Z + "iw_plus.gif";
    Ec.bw = J.Z + "iw_minus.gif";
    Ec.lx = J.Z + "stop_icon.png";
    C.fa(Ec, W);
    C[x](Ec[u], {
        getBusList: function(a) {
            this.ea.push({
                method: "getBusList",
                arguments: [a]
            })
        },
        getBusLine: function(a) {
            this.ea.push({
                method: "getBusLine",
                arguments: [a]
            })
        },
        setGetBusListCompleteCallback: function(a) {
            this.u.xt = a || m()
        },
        setGetBusLineCompleteCallback: function(a) {
            this.u.wt = a || m()
        },
        setBusListHtmlSetCallback: function(a) {
            this.u.vt = a || m()
        },
        setBusLineHtmlSetCallback: function(a) {
            this.u.ut = a || m()
        },
        setPolylinesSetCallback: function(a) {
            this.u.Zo = a || m()
        }
    });
    function Fc(a) {
        W.call(this, a);
        a = a || {};
        this.$c = {
            input: a.input || k,
            zn: a.baseDom || k,
            types: a.types || [],
            ul: a.onSearchComplete || m()
        };
        this.Cb.src = a.location || "\u5168\u56fd";
        this.Ee = "";
        this.ld = k;
        this.Iq = "";
        this.Gm();
        za(5011);
        var b = this;
        L.load("autocomplete", 
        function() {
            b.Nb()
        })
    }
    C.fa(Fc, W, "Autocomplete");
    C[x](Fc[u], {
        Gm: m(),
        show: m(),
        G: m(),
        rp: function(a) {
            this.$c.types = a
        },
        Ig: function(a) {
            this.Cb.src = a
        },
        search: ba("Ee"),
        Fl: ba("Iq")
    });
    var Ca;
    H.Map = wa;
    H.Hotspot = Oa;
    H.MapType = Yb;
    H.Point = K;
    H.Pixel = S;
    H.Size = P;
    H.Bounds = La;
    H.TileLayer = Sb;
    H.Projection = Bb;
    H.MercatorProjection = T;
    H.PerspectiveProjection = Na;
    H.Copyright = function(a, b, c) {
        this.id = a;
        this.Va = b;
        this.content = c
    };
    H.Overlay = Db;
    H.Label = Kb;
    H.Marker = U;
    H.Icon = Ib;
    H.Polyline = Ob;
    H.Polygon = Nb;
    H.InfoWindow = Jb;
    H.Circle = Pb;
    H.Control = nb;
    H.NavigationControl = rb;
    H.GeolocationControl = tb;
    H.OverviewMapControl = vb;
    H.CopyrightControl = ub;
    H.ScaleControl = wb;
    H.MapTypeControl = yb;
    H.TrafficLayer = Wb;
    H.CustomLayer = Xb;
    H.ContextMenu = zb;
    H.MenuItem = Ab;
    H.LocalSearch = Ja;
    H.TransitRoute = vc;
    H.DrivingRoute = xc;
    H.WalkingRoute = yc;
    H.Autocomplete = Fc;
    H.Geocoder = zc;
    H.LocalCity = Cc;
    H.Geolocation = Geolocation;
    H.BusLineSearch = Ec;
    H.Boundary = Dc;
    //简单的属性复制，通过它将那些匿名函数转化为实名函数
    function Z(a, b) {
        for (var c in b) 
        	a[c] = b[c]
    }
    
    Z(window, {
        BMap: H,
        _jsload: function(a, b) {
            ma.Ml.Oz && ma.Ml.set(a, b);
            L.Ox(a, b)
        },
        BMAP_API_VERSION: "1.5"
    });
    
    var Gc = wa[u];
    Z(Gc, {
        getBounds: Gc.lf,
        getCenter: Gc.Ia,
        getMapType: Gc.ba,
        getSize: Gc.Sb,
        setSize: Gc.sd,
        getViewport: Gc.el,
        getZoom: Gc.ha,
        centerAndZoom: Gc.Ic,
        panTo: Gc.qd,
        panBy: Gc.Od,
        setCenter: Gc.rd,
        setCurrentCity: Gc.op,
        setMapType: Gc.Te,
        setViewport: Gc.Ih,
        setZoom: Gc.Jl,
        highResolutionEnabled: Gc.ie,
        zoomTo: Gc.Sd,
        zoomIn: Gc.Dp,
        zoomOut: Gc.Ep,
        addHotspot: Gc.wn,
        removeHotspot: Gc.oA,
        clearHotspots: Gc.Fk,
        checkResize: Gc.Qx,
        addControl: Gc.vn,
        removeControl: Gc.nA,
        getContainer: Gc.Fd,
        addContextMenu: Gc.hh,
        removeContextMenu: Gc.Dh,
        addOverlay: Gc.Ha,
        removeOverlay: Gc.mc,
        clearOverlays: Gc.Qr,
        openInfoWindow: Gc.Xb,
        closeInfoWindow: Gc.Eb,
        pointToOverlayPixel: Gc.Pd,
        overlayPixelToPoint: Gc.Ct,
        getInfoWindow: Gc.Le,
        getOverlays: Gc.Xy,
        getPanes: function() {
            return {
                floatPane: this.cc.ks,
                markerMouseTarget: this.cc.Vo,
                floatShadow: this.cc.ls,
                labelPane: this.cc.Xs,
                markerPane: this.cc.ft,
                markerShadow: this.cc.gt,
                mapPane: this.cc.nl
            }
        },
        addTileLayer: Gc.zi,
        removeTileLayer: Gc.gj,
        pixelToPoint: Gc.Ma,
        pointToPixel: Gc.$a
    });
    
    //地图
    var Hc = Yb[u];
    Z(Hc, {
        getTileLayer: Hc.mz,
        getMinZoom: Hc.ph,
        getMaxZoom: Hc.og,
        getProjection: Hc.qg,
        getTextColor: Hc.Ti,
        getTips: Hc.Ui
    });
    Z(window, {
        BMAP_NORMAL_MAP: xa,
        BMAP_PERSPECTIVE_MAP: ya,
        BMAP_SATELLITE_MAP: Aa,
        BMAP_HYBRID_MAP: Ba
    });
    var Ic = T[u];
    Z(Ic, {
        lngLatToPoint: Ic.ll,
        pointToLngLat: Ic.Al
    });
    var Jc = Na[u];
    Z(Jc, {
        lngLatToPoint: Jc.ll,
        pointToLngLat: Jc.Al
    });
    var Kc = La[u];
    Z(Kc, {
        equals: Kc.Rb,
        containsPoint: Kc.Zx,
        containsBounds: Kc.Yx,
        intersects: Kc.Ls,
        extend: Kc[x],
        getCenter: Kc.Ia,
        isEmpty: Kc.Qe,
        getSouthWest: Kc.Id,
        getNorthEast: Kc.Hd,
        toSpan: Kc.Ap
    });
    var Lc = Db[u];
    Z(Lc, {
        isVisible: Lc.Re,
        show: Lc.show,
        hide: Lc.G
    });
    Db.getZIndex = Db.Vi;
    var Mc = Ma[u];
    Z(Mc, {
        openInfoWindow: Mc.Xb,
        closeInfoWindow: Mc.Eb,
        enableMassClear: Mc.kf,
        disableMassClear: Mc.my,
        show: Mc.show,
        hide: Mc.G,
        getMap: Mc.zo,
        addContextMenu: Mc.hh,
        removeContextMenu: Mc.Dh
    });
    var Nc = U[u];
    Z(Nc, {
        setIcon: Nc.se,
        getIcon: Nc.xs,
        setPosition: Nc.ca,
        getPosition: Nc.V,
        setOffset: Nc.nc,
        getOffset: Nc.Me,
        getLabel: Nc.ys,
        setLabel: Nc.Hg,
        setTitle: Nc.xb,
        setTop: Nc.Hh,
        enableDragging: Nc.nb,
        disableDragging: Nc.Sn,
        setZIndex: Nc.Il,
        getMap: Nc.zo,
        setAnimation: Nc.Gg,
        setShadow: Nc.Hl,
        hide: Nc.G
    });
    Z(window, {
        BMAP_ANIMATION_DROP: 1,
        BMAP_ANIMATION_BOUNCE: 2
    });
    var Oc = Kb[u];
    Z(Oc, {
        setStyle: Oc.Jb,
        setStyles: Oc.uf,
        setContent: Oc.ac,
        setPosition: Oc.ca,
        getPosition: Oc.V,
        setOffset: Oc.nc,
        getOffset: Oc.Me,
        setTitle: Oc.xb,
        setZIndex: Oc.Il,
        getMap: Oc.zo
    });
    var Pc = Ib[u];
    Z(Pc, {
        setImageUrl: Pc.DA,
        setSize: Pc.sd,
        setAnchor: Pc.wb,
        setImageOffset: Pc.jj,
        setImageSize: Pc.CA,
        setInfoWindowAnchor: Pc.EA,
        setPrintImageUrl: Pc.KA
    });
    var Qc = Jb[u];
    Z(Qc, {
        redraw: Qc.Zb,
        setTitle: Qc.xb,
        setContent: Qc.ac,
        getContent: Qc.qs,
        getPosition: Qc.V,
        enableMaximize: Qc.Ed,
        disableMaximize: Qc.Qk,
        isOpen: Qc.qa,
        setMaxContent: Qc.kj,
        maximize: Qc.ol,
        enableAutoPan: Qc.Ii
    });
    var Rc = Fb[u];
    Z(Rc, {
        getPath: Rc.gc,
        setPath: Rc.oc,
        setPositionAt: Rc.Jg,
        getStrokeColor: Rc.hz,
        setStrokeWeight: Rc.oj,
        getStrokeWeight: Rc.Ds,
        setStrokeOpacity: Rc.mj,
        getStrokeOpacity: Rc.iz,
        setFillOpacity: Rc.El,
        getFillOpacity: Rc.Qy,
        setStrokeStyle: Rc.nj,
        getStrokeStyle: Rc.Cs,
        getFillColor: Rc.Py,
        getBounds: Rc.lf,
        enableEditing: Rc.dd,
        disableEditing: Rc.ly
    });
    var Sc = Pb[u];
    Z(Sc, {
        setCenter: Sc.rd,
        getCenter: Sc.Ia,
        getRadius: Sc.$y,
        setRadius: Sc.Gl
    });
    var Tc = Nb[u];
    Z(Tc, {
        getPath: Tc.gc,
        setPath: Tc.oc,
        setPositionAt: Tc.Jg
    });
    var Uc = Oa[u];
    Z(Uc, {
        getPosition: Uc.V,
        setPosition: Uc.ca,
        getText: Uc.Go,
        setText: Uc.pj
    });
    K[u].equals = K[u].Rb;
    S[u].equals = S[u].Rb;
    P[u].equals = P[u].Rb;
    Z(window, {
        BMAP_ANCHOR_TOP_LEFT: ob,
        BMAP_ANCHOR_TOP_RIGHT: pb,
        BMAP_ANCHOR_BOTTOM_LEFT: qb,
        BMAP_ANCHOR_BOTTOM_RIGHT: 3
    });
    var Vc = nb[u];
    Z(Vc, {
        setAnchor: Vc.wb,
        getAnchor: Vc.mo,
        setOffset: Vc.nc,
        getOffset: Vc.Me,
        show: Vc.show,
        hide: Vc.G,
        isVisible: Vc.Re,
        toString: Vc.toString
    });
    var Wc = rb[u];
    Z(Wc, {
        getType: Wc.vh,
        setType: Wc.Kg
    });
    Z(window, {
        BMAP_NAVIGATION_CONTROL_LARGE: 0,
        BMAP_NAVIGATION_CONTROL_SMALL: 1,
        BMAP_NAVIGATION_CONTROL_PAN: 2,
        BMAP_NAVIGATION_CONTROL_ZOOM: 3
    });
    var Xc = vb[u];
    Z(Xc, {
        changeView: Xc.dc,
        setSize: Xc.sd,
        getSize: Xc.Sb
    });
    var Yc = wb[u];
    Z(Yc, {
        getUnit: Yc.pz,
        setUnit: Yc.sp
    });
    Z(window, {
        BMAP_UNIT_METRIC: "metric",
        BMAP_UNIT_IMPERIAL: "us"
    });
    var Zc = ub[u];
    Z(Zc, {
        addCopyright: Zc.xk,
        removeCopyright: Zc.gp,
        getCopyright: Zc.lg,
        getCopyrightCollection: Zc.qo
    });
    Z(window, {
        BMAP_MAPTYPE_CONTROL_HORIZONTAL: xb,
        BMAP_MAPTYPE_CONTROL_DROPDOWN: 1
    });
    var $c = Sb[u];
    Z($c, {
        getMapType: $c.ba,
        getCopyright: $c.lg,
        isTransparentPng: $c.il
    });
    var ad = zb[u];
    Z(ad, {
        addItem: ad.zk,
        addSeparator: ad.xn,
        removeSeparator: ad.hp
    });
    var bd = Ab[u];
    Z(bd, {
        setText: bd.pj
    });
    var cd = W[u];
    Z(cd, {
        getStatus: cd.rg,
        setSearchCompleteCallback: cd.qp,
        getPageCapacity: cd.Pc,
        setPageCapacity: cd.Gh,
        setLocation: cd.Ig,
        disableFirstResultSelection: cd.Tn,
        enableFirstResultSelection: cd.ao,
        gotoPage: cd.tg,
        searchNearby: cd.Fh,
        searchInBounds: cd.Eg,
        search: cd.search
    });
    Z(window, {
        BMAP_STATUS_SUCCESS: 0,
        BMAP_STATUS_CITY_LIST: 1,
        BMAP_STATUS_UNKNOWN_LOCATION: 2,
        BMAP_STATUS_UNKNOWN_ROUTE: 3,
        BMAP_STATUS_INVALID_KEY: 4,
        BMAP_STATUS_INVALID_REQUEST: 5,
        BMAP_STATUS_PERMISSION_DENIED: 6,
        BMAP_STATUS_SERVICE_UNAVAILABLE: 7,
        BMAP_STATUS_TIMEOUT: 8
    });
    Z(window, {
        BMAP_POI_TYPE_NORMAL: 0,
        BMAP_POI_TYPE_BUSSTOP: 1,
        BMAP_POI_TYPE_BUSLINE: 2,
        BMAP_POI_TYPE_SUBSTOP: 3,
        BMAP_POI_TYPE_SUBLINE: 4
    });
    Z(window, {
        BMAP_TRANSIT_POLICY_LEAST_TIME: 0,
        BMAP_TRANSIT_POLICY_LEAST_TRANSFER: 2,
        BMAP_TRANSIT_POLICY_LEAST_WALKING: 3,
        BMAP_TRANSIT_POLICY_AVOID_SUBWAYS: 4,
        BMAP_LINE_TYPE_BUS: 0,
        BMAP_LINE_TYPE_SUBWAY: 1,
        BMAP_LINE_TYPE_FERRY: 2
    });
    var dd = uc[u];
    Z(dd, {
        clearResults: dd.Ac
    });
    var ed = vc[u];
    Z(ed, {
        setPolicy: ed.lj,
        toString: ed.toString,
        setPageCapacity: ed.Gh
    });
    Z(window, {
        BMAP_DRIVING_POLICY_LEAST_TIME: 0,
        BMAP_DRIVING_POLICY_LEAST_DISTANCE: 1,
        BMAP_DRIVING_POLICY_AVOID_HIGHWAYS: 2
    });
    Z(window, {
        BMAP_HIGHLIGHT_STEP: 1,
        BMAP_HIGHLIGHT_ROUTE: 2
    });
    Z(window, {
        BMAP_ROUTE_TYPE_DRIVING: hc,
        BMAP_ROUTE_TYPE_WALKING: gc
    });
    Z(window, {
        BMAP_ROUTE_STATUS_NORMAL: ic,
        BMAP_ROUTE_STATUS_EMPTY: 1,
        BMAP_ROUTE_STATUS_ADDRESS: 2
    });
    var fd = xc[u];
    Z(fd, {
        setPolicy: fd.lj
    });
    var gd = Fc[u];
    Z(gd, {
        show: gd.show,
        hide: gd.G,
        setTypes: gd.rp,
        setLocation: gd.Ig,
        search: gd.search,
        setInputValue: gd.Fl
    });
    Z(Xb[u], {});
    var hd = Dc[u];
    Z(hd, {
        get: hd.get
    });
    H.Ex();
    
    
	
})()